WS-Security:在SOAP Security标头中包含多个用户标识的正确方法是什么?

时间:2013-01-03 00:49:47

标签: web-services soap ws-security

我想在一条SOAP消息中传递userA和userB的用户名/密码。因此,我想在一条SOAP消息中传递两个 UsernameToken

我在想两个选择:

选项1) 安全性元素中的 UsernameToken 元素:

<soapenv:Header>
    <wsse:Security xmlns:wsse="sec" xmlns:wsu="ut">
        <wsse:UsernameToken wsu:Id="UsernameToken-3">
            <wsse:Username>userA</wsse:Username>
            <wsse:Password Type="text">passA</wsse:Password>
        </wsse:UsernameToken>
        <wsse:UsernameToken wsu:Id="UsernameToken-4">
            <wsse:Username>userB</wsse:Username>
            <wsse:Password Type="text">passB</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>            
</soapenv:Header>

选项2) 每个 UsernameToken 安全元素:

 <soapenv:Header>
    <wsse:Security xmlns:wsse="sec" xmlns:wsu="ut">
        <wsse:UsernameToken wsu:Id="UsernameToken-3">
            <wsse:Username>userA</wsse:Username>
            <wsse:Password Type="text">passA</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>            
    <wsse:Security xmlns:wsse="sec" xmlns:wsu="ut">
        <wsse:UsernameToken wsu:Id="UsernameToken-4">
            <wsse:Username>userB</wsse:Username>
            <wsse:Password Type="text">passB</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>            
</soapenv:Header>

-

最标准的选项1)或2)是什么?还是其他?

1 个答案:

答案 0 :(得分:3)

使用我可能记得的几个用户的最常见情况是通过几个中间节点传递消息。在SOAP规范方面,它们被命名为Actors,需要separate wsse:Security element具有不同的soap:actor属性。它对应于你问题中的选项2)。

考虑here的下一个例子:

<soap:Header>        
  <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext">
     <wsse:UsernameToken wsu:Id="sample" xmlns:wsu="http://schemas.xmlsoap.org/ws/2003/06/utility">
       <wsse:Username>sample</wsse:Username>
       <wsse:Password Type="wsse:PasswordText">oracle</wsse:Password>
     </wsse:UsernameToken>
  </wsse:Security>
  <wsse:Security soap:actor="oracle" xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext">
    <wsse:UsernameToken wsu:Id="oracle" xmlns:wsu="http://schemas.xmlsoap.org/ws/2003/06/utility">
      <wsse:Username>oracle</wsse:Username>
      <wsse:Password Type="wsse:PasswordText">oracle</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</soap:Header>

      

此示例包含两个块。具有“oracle”属性的那个用于对最终用户进行身份验证,而没有此属性的另一个用于在前端网关上进行身份验证。

如果您的用例假设同时对多个非SOAP用户的用户进行身份验证,则可以从您的问题中考虑选项1。