【问题标题】:WS-Security: What is the correct way to include multiple user identities in the SOAP Security header?WS-Security:在 SOAP 安全标头中包含多个用户身份的正确方法是什么?
【发布时间】:2013-01-03 00:49:47
【问题描述】:

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

我正在考虑两种选择:

选项 1) Security 元素内的 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 的 Security 元素:

 <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) 是什么?还是其他?

【问题讨论】:

    标签: web-services soap ws-security


    【解决方案1】:

    我可能记得使用多个用户的最常见情况是通过多个中间节点传递消息。根据 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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2011-04-26
      相关资源
      最近更新 更多