Web服务 – 使用WS-UsernameToken身份验证的SOAP请求示例

前端之家收集整理的这篇文章主要介绍了Web服务 – 使用WS-UsernameToken身份验证的SOAP请求示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用WS-UsernameToken规范来验证SOAP请求,但目标设备总是拒绝访问。我的非工作请求看起来像这样。 (我试图哈希的密码是系统。)
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
 <Header>
  <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <UsernameToken>
      <Username>root</Username>
      <Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">EVpXS/7yc/vDo+ZyIg+cc0fWdMA=</Password>
      <Nonce>tKUH8ab3Rokm4t6IAlgcdg9yaEw=</Nonce>
      <Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2010-08-10T10:52:42Z</Created>
    </UsernameToken>
  </Security>
 </Header>
  <Body>
    <SomeRequest xmlns="http://example.ns.com/foo/bar" />
  </Body>
</Envelope>

我正在寻找的是一个类似的请求示例,但使用真正有效的身份验证令牌。例如,如果您有使用这些令牌的gSOAP应用程序,并且可以生成请求并在此发布结果,我将非常感谢。

解决方法

核心是定义名称空间的前缀,并使用它们来强化每个标签 – 你正在混合3个命名空间,而不是通过尝试破坏默认值来飞行。使用 standard doc中使用的前缀也很好,只是为了防止对方有点马虎。

最后但并非最不重要的是,只要您可以使用默认类型的字段,那么对于密码,您必须列出该类型,对于它已经是Base64的Nonce。

确保您在通过XML发送之前检查生成的令牌是否正确,不要忘记wsse:Password的内容是Base64(SHA-1(nonce创建的密码))和wsu中的日期时间:创建可以很容易弄乱你所以一旦你修复了前缀和命名空间,并验证yout SHA-1是否工作正常,没有XML(只是想象你正在验证请求并做服务器端的SHA-1计算),你也可以做一个真正的wihtout创建,甚至没有随机数。哦和随机数可以有不同的编码,所以如果你真的想强制另一个编码,你必须进一步看看wsu命名空间。

<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "...">
  <S11:Header>
  ...
    <wsse:Security>
      <wsse:UsernameToken>
        <wsse:Username>NNK</wsse:Username>
        <wsse:Password Type="...#PasswordDigest">weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==</wsse:Password>
        <wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
        <wsu:Created>2003-07-16T01:24:32</wsu:Created>
      </wsse:UsernameToken>
    </wsse:Security>
  ...
  </S11:Header>
...
</S11:Envelope>

猜你在找的HTML相关文章