【问题标题】:UsernameToken and BinarySecurityToken in the same services同一服务中的 UsernameToken 和 BinarySecurityToken
【发布时间】:2012-04-02 11:13:46
【问题描述】:

我有一个新需求,但我不知道如何开发它,或者它是否可能,问题是我的应用程序有一个 Web 服务器,但客户端想用两种不同的安全策略调用它,有时调用它与 UsernameToken 一起使用,有时与 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: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 字符串并用它做任何我想做的事情,另一个疑问是我不知道我是否可以结合同一服务中有两个安全策略,或者我应该公开另一个。

【问题讨论】:

    标签: web-services axis2 ws-security rampart


    【解决方案1】:

    将多个安全策略应用于同一服务的理想方法是通过策略替代方案。但目前这在 Axis2/Rampart 中不受支持。

    但作为一种解决方法,可以将不同的策略用于同一服务的不同绑定。这篇博文介绍了如何将不同的策略应用于同一服务。

    http://blog.rampartfaq.com/2009/08/how-to-add-secured-and-non-secured-end.html

    关于二进制安全令牌政策的问题:

    在 WS-Security 中定义了二进制安全令牌以传输不同类型的令牌,例如 X.509、Kerberos、以某种格式编码的非 XML 令牌。因此,它是一个定义为在 SOAP 消息中嵌入不同类型的标记的通用元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-08
      • 2012-04-15
      • 2010-10-02
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      相关资源
      最近更新 更多