我正在尝试连接到需要 SSL 安全性和用户名/密码凭据的第三方 SOAP 1.1 服务。预期的一个例子是:
<soapenv:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>username</wsse:Username>
<wsse:Password>password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
我的客户端配置如下:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="thirdpartyservicebindingconfig">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://..."
binding="basicHttpBinding"
bindingConfiguration="thirdpartyservicebindingconfig"
contract="thirdpartyservicecontract"
name="thirdpartyserviceendpoint" />
</client>
</system.serviceModel>
服务客户端代码为:
var client = new thirdpartyservicecontractclient();
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "password";
var result = client.DoSomething();
我收到以下故障异常消息:
安全处理器无法在邮件中找到安全标头。这可能是因为消息是不安全的错误,或者是因为通信双方之间存在绑定不匹配。如果为安全配置了服务并且客户端未使用安全性,则可能会发生这种情况。
编辑:
如果我将安全模式重新配置为“传输”:
<security mode="TransportWithMessageCredential">
我收到来自第三方服务的错误:
com.sun.xml.wss.XWSSecurityException: 消息不符合配置的策略 [AuthenticationTokenPolicy(S)]: No Security Header found; 嵌套异常是 com.sun.xml.wss.XWSSecurityException:com.sun.xml.wss.XWSSecurityException:消息不符合配置的策略 [AuthenticationTokenPolicy(S)]:未找到安全标头。
如何配置我的客户端以连接到此服务?
- WS Security 通过 SSL 使用纯文本密码