che*_*che 21 ws-security soap web-services 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>
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是一个类似的请求示例,但具有实际工作的身份验证令牌.例如,如果您有使用这些令牌的gSOAP应用程序,并且可以生成请求并在此处发布结果,我将非常感激.
ZXX*_*ZXX 19
核心问题是为名称空间定义前缀并使用它们来强化每个标记 - 您混合了3个名称空间,并且通过尝试破解默认值而不会飞行.使用标准do c中使用的前缀也很好- 只是在另一方有点草率的情况下.
最后但并非最不重要的是,尽可能使用字段的默认类型会更好 - 所以对于密码,你必须列出类型,对于Nonce它已经是Base64.
在通过XML发送之前,请确保检查生成的令牌是否正确,并且不要忘记wsse:Password的内容是Base64(SHA-1(nonce + created +密码))和wsu中的日期时间:创建可以很容易搞砸你.因此,一旦修复前缀和名称空间并验证SHA-1在没有XML的情况下工作正常(只是想象一下您正在验证请求并执行SHA-1计算的服务器端),您还可以执行创建,甚至不使用Nonce.哦和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>
Run Code Online (Sandbox Code Playgroud)
Metro 1.2中的哈希密码支持和令牌断言参数很好地解释了带有摘要密码的UsernameToken的样子:
摘要密码支持
的WSS 1.1用户名标记配置文件允许消化在一个要发送的密码
wsse:UsernameTokenSOAP消息的.wsse:UsernameToken在这种情况下,还包括两个可选元素 :wsse:Nonce和wsse:Created.随机数是发件人创建的随机值,以包含在它发送的每个UsernameToken中.添加创建时间以将随机数组合到"新鲜度"时间段.在这种情况下,密码摘要计算如下:Run Code Online (Sandbox Code Playgroud)Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )这是带有摘要密码的UsernameToken的样子:
Run Code Online (Sandbox Code Playgroud)<wsse:UsernameToken wsu:Id="uuid_faf0159a-6b13-4139-a6da-cb7b4100c10c"> <wsse:Username>Alice</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">6S3P2EWNP3lQf+9VC3emNoT57oQ=</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YF6j8V/CAqi+1nRsGLRbuZhi</wsse:Nonce> <wsu:Created>2008-04-28T10:02:11Z</wsu:Created> </wsse:UsernameToken>
| 归档时间: |
|
| 查看次数: |
143387 次 |
| 最近记录: |