我有了一个新的需求,但我不知道如何开发它,或者它是否可能,问题是我的应用程序有一个web服务器,但客户端想用两种不同的安全策略调用它,有时用UsernameToken调用,有时用BinarySecurityToken调用。
客户端将发送的报头包括:
对于UsernameToken
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>USER</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">PASS</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">Qm2Ytc9hW/xsQSo4KAurSQ==</wsse:Nonce>
<wsu:Created>2012-03-27T07:27:02.605Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
而对于BinarySecurityToken
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" ValueType="esquema" wsu:Id="SSOToken" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MEEwNjJFNTU3QzN....G13eWo5RT0=</wsse:BinarySecurityToken>
</wsse:Security>
因此,对于UsernameToken,我在services.xml中使用了以下代码。它工作得很好,在PWCBHandler中我得到了用户名和密码,然后我在数据库中验证了它。
<module ref="rampart" />
<wsp:Policy wsu:Id="UsernameToken" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient" />
</wsp:Policy>
</sp:SupportingTokens>
<ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy">
<ramp:passwordCallbackClass>com.aaa.bbb.ccc.impl.PWCBHandler</ramp:passwordCallbackClass>
</ramp:RampartConfig>
</wsp:All>
<wsp:All/>
</wsp:ExactlyOne>
</wsp:Policy>问题是我不知道如何实现BinarySecurityToken的安全性,以便获取base64字符串并对其做任何我想做的事情,另一个疑问是我不知道是否可以在同一服务中组合两个安全策略,或者我是否应该公开另一个安全策略。
发布于 2012-04-20 19:51:20
将多个安全策略应用于同一服务的理想方式是通过策略替代。但目前Axis2/Rampart不支持这一点。
但作为一种解决办法,可以将不同的策略绑定到同一服务的不同绑定中。这篇博文解释了如何将不同的策略应用于同一服务。
http://blog.rampartfaq.com/2009/08/how-to-add-secured-and-non-secured-end.html
关于二进制安全令牌策略的问题:
二进制安全令牌是在WS-Security中定义的,用于传输不同类型的令牌,如X.509、Kerberos、以某种格式编码的非XML令牌。因此,它是定义为在SOAP消息中嵌入不同类型的令牌的通用元素。
https://stackoverflow.com/questions/9975371
复制相似问题