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

Web services WS-Security:在SOAP安全标头中包含多个用户标识的正确方法是什么?,web-services,soap,ws-security,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">

我想在一条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>

乌瑟拉
帕萨
用户B
通行证

备选方案2) 每个用户名令牌的安全性元素:

 <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>

乌瑟拉
帕萨
用户B
通行证
--


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

我记得使用多个用户最常见的情况是通过多个中间节点传递消息。根据SOAP规范,它们被命名为actor,并且需要使用不同的SOAP:actor属性。它对应于您问题中的选项2)

考虑下一个例子:


样品
神谕
神谕
神谕

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

如果您的用例假设同时是几个不是SOAP参与者的用户,那么您可以考虑选项1)。
<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>