WS-Security 為 SOAP 訊息提供安全性擴充,透過 Header 傳遞 UsernameToken、X.509 憑證、簽名、加密等資訊。結構複雜,需機器可讀的策略描述:WS-Policy + WS-SecurityPolicy,可內嵌於 WSDL。
Axis2 的安全模組(rampart.mar、rahas.mar),攔截訊息流處理安全邏輯。
.jar 至 Axis2 lib,.mar 至 repository/modules。security.provider.99=org.bouncycastle.jce.provider.BouncyCastleProvider 於 java.security。axis2.war 部署至 Servlet 容器。三操作:getBook、addBook、getBooksByType,採 ADB 資料綁定。
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken=".../AlwaysToRecipient" />
</wsp:Policy>
</sp:SupportingTokens>
<module ref="rampart"/>
<wsp:Policy ...> ... <ramp:RampartConfig>
<ramp:passwordCallbackClass>...PWCBHandler</ramp:passwordCallbackClass>
</ramp:RampartConfig> ... </wsp:Policy>
回調類驗證用戶名/密碼:
public class PWCBHandler implements CallbackHandler {
public void handle(Callback[] callbacks) {
for (Callback cb : callbacks) {
WSPasswordCallback pw = (WSPasswordCallback) cb;
if (pw.getUsage() == USERNAME_TOKEN_UNKNOWN) {
if (!"libuser".equals(pw.getIdentifier()) || !"books".equals(pw.getPassword()))
throw new UnsupportedCallbackException(cb, "check failed");
}
}
}
}
ServiceClient client = stub._getServiceClient();
Options opts = client.getOptions();
opts.setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy("policy.xml"));
opts.setUserName("libuser");
opts.setPassword("books");
client.engageModule("rampart");
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>libuser</wsse:Username>
<wsse:Password Type="...#PasswordText">books</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
<sp:TransportBinding>
<wsp:Policy><sp:TransportToken><wsp:Policy><sp:HttpsToken RequireClientCertificate="false"/></wsp:Policy></sp:TransportToken></wsp:Policy>
</sp:TransportBinding>
Rampart 會拒絕 HTTP 連線。
Policy 加入 <sp:HashPassword/>,訊息攜帶 Nonce、Created、PasswordDigest(SHA-1(Base64(Nonce + Created + Password))),防重放與竄改:
<wsse:Password Type="...#PasswordDigest">/Wt/2yDdZwa8a5qd7U70hrp29/w=</wsse:Password>
<wsse:Nonce>4ZQz5ytME/RXfChuKJ03iA==</wsse:Nonce>
<wsu:Created>2009-03-17T11:20:57.467Z</wsu:Created>
掌握 Axis2 + Rampart 基礎安全配置,後續將探討 XML 加密與簽名進階應用。