我正在扩展一个旧的 .NET ASP 应用程序(它无法升级)。它将有一个从 CXF (java) 调用的 SOAP Web 服务。我已经在 .NET 端安装和配置了 WSE3 扩展,现在我可以使用soap ui 从 ASP 世界之外调用我的简单服务。一切似乎都正常 - 我可以阻止某些使用用户名和明文密码进行身份验证的用户的访问。但是,当我在soap-ui 中将WSS-Passoword-Type 设置为“PasswordDigest”时,我收到以下消息:
无法对安全令牌进行身份验证或授权 ---> WSE562:传入的用户名令牌包含密码哈希。内置的 UsernameTokenManager 不支持这种类型的 UsernameToken。有关 UsernameTokenManager.AuthenticateToken 方法的更多详细信息,请参阅文档
此服务将由 ESB 从外部调用 - 因此我没有太多选择来选择身份验证方案。我需要该服务来支持“PasswordDigest”。有没有办法实现它?
我知道我可以实现自定义 UsernameTokenManager - 但它必须返回用户密码,而它只获得散列值。这对我没有帮助。
以下是我提出的要求供参考:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/" xmlns:wsa="http://www.w3.org/2005/08/addressing">
<soap:Header>
<wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-22">
<wsse:Username>user</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">xHxNY51954nB9l3ulEp8fRX8HdE=</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">TEU+Z/yfS0oDTOxMZG+AXA==</wsse:Nonce>
<wsu:Created>2012-07-02T11:39:17.695Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<tem:HelloWorld/>
</soap:Body>
</soap:Envelope>