Pau*_*ing 4 wcf ws-security soap basichttpbinding wcf-security
我正在尝试连接到需要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>
Run Code Online (Sandbox Code Playgroud)
我的客户端配置如下:
<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>
Run Code Online (Sandbox Code Playgroud)
服务客户端代码是:
var client = new thirdpartyservicecontractclient();
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "password";
var result = client.DoSomething();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误异常消息:
安全处理器无法在消息中找到安全标头.这可能是因为消息是不安全的故障,或者因为通信方之间存在绑定不匹配.如果为安全性配置服务并且客户端未使用安全性,则会发生这种情况.
编辑:
如果我将安全模式重新配置为"传输":
<security mode="TransportWithMessageCredential">
我从第三方服务收到错误:
com.sun.xml.wss.XWSSecurityException:消息不符合已配置的策略[AuthenticationTokenPolicy(S)]:未找到安全标头; 嵌套异常是com.sun.xml.wss.XWSSecurityException:com.sun.xml.wss.XWSSecurityException:消息不符合已配置的策略[AuthenticationTokenPolicy(S)]:找不到安全标头.
如何配置我的客户端以连接到此服务?
Rick Strahl也遇到了同样的问题.这是他描述和解决问题的博客文章的链接.
问题:
问题是WCF期望在响应中使用TimeStamp Soap头.如果你查看出站响应和Soap标题,你会看到那里有一个时间戳.期望在返回Soap响应时返回时间戳.请注意,这不是WS-Security的要求,因此WCF在此处执行"特殊"操作,实际上会破坏此服务调用.
解:
BindingElementCollection elements = client.Endpoint.Binding.CreateBindingElements();
elements.Find<SecurityBindingElement>().IncludeTimestamp = false;
client.Endpoint.Binding = new CustomBinding(elements);
Run Code Online (Sandbox Code Playgroud)
上面的代码通过显式删除出站调用中的Timestamp来修改Binding配置,这消除了服务器返回它的要求.这使得WCF很开心,并且电话会通过.
| 归档时间: |
|
| 查看次数: |
4459 次 |
| 最近记录: |