1

我想在一条 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) 是什么?或其他?

4

1 回答 1

3

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

从这里考虑下一个例子:

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

于 2013-01-15T11:39:13.867 回答