web-services - 使用WS-UsernameToken认证的SOAP请求示例

标签 web-services soap ws-security digest usernametoken

我正在尝试使用WS-UsernameToken规范对SOAP请求进行身份验证,但是目标设备始终拒绝访问。我的无效请求看起来像这样。 (我要哈希的密码是system。)

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

我正在寻找的是类似的请求示例,但具有实际起作用的身份验证 token 。例如,如果您有使用这些 token 的gSOAP应用程序,并且可以生成一个请求并将结果发布到此处,我将不胜感激。

最佳答案

核心是为 namespace 定义前缀,并使用它们来强化每个标签-您正在混合3个 namespace ,并且通过尝试破解默认值而无法实现。确切地使用standard do c中使用的前缀也是很好的-以防万一对方有点草率。

最后但并非最不重要的一点是,最好尽可能使用默认类型的字段-因此对于密码,必须列出类型,因为Nonce已经是Base64了。

通过XML发送生成的 token 之前,请确保检查生成的 token 是否正确,并且不要忘记wsse:Password的内容是Base64(SHA-1(nonce + created + password))和wsu中的日期时间:创建的内容很容易将您弄乱。因此,一旦您修复了前缀和 namespace ,并验证了SHA-1在没有XML的情况下是否可以正常工作(假设您正在验证请求并进行SHA-1计算的服务器端),您还可以执行创建的真实操作,甚至没有Nonce。 Oh和Nonce可以使用不同的编码,因此,如果您真的想强制使用另一种编码,则必须进一步研究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>

关于web-services - 使用WS-UsernameToken认证的SOAP请求示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448498/

相关文章:

java - Tomcat 中的基本 Jersey Rest WS 给出 "resource not available"

c# - 使用 WS-Security web 服务的 WCF 客户端

web-services - Axis2+Rampart WebService 签名和加密

linux - 带有 Linux CURL 的 SOAP MTOM 附件

C++ QtSoap 不工作: "undefined reference to ` QtSoapHttpTransport::QtSoapHttpTransport(QObject*)`

authentication - 使用 Spring Web 服务添加 Spring Security @Secured 注释会禁用 Web 服务端点

c# - 我需要哪些 SOAP/WS-Security/WS-Addressing/etc 来发送这条消息

objective-c - 将来自Web服务的大量数据分块写入文件

java - SPNEGO:成功协商和身份验证后的后续调用

ruby-on-rails-3 - 带有JSON的Rails 3 RESTful Web服务