作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试配置我的 WCF 客户端以创建一个包含 WS-Addressing、WS-Security 和 TLS 的 SOAP 1.1 请求。
安全要求是消息包含用户名 token 、时间戳,并且时间戳是使用包含的 BinarySecurityToken 签名的。
我使用了以下 link 中的示例创建我的 WCF 客户端绑定(bind)。我稍微修改了示例(见下文),以便将 HTTPS 用作传输机制,并且 MessageSecurity 基于 UsernameOverTransport。
HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement();
// the message security binding element will be configured to require 2 tokens:
// 1) A username-password encrypted with the service token
// 2) A client certificate used to sign the message
// Instantiate a binding element that will require the username/password token in the message (encrypted with the server cert)
TransportSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
// Create supporting token parameters for the client X509 certificate.
X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
// Specify that the supporting token is passed in message send by the client to the service
clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
// Turn off derived keys
clientX509SupportingTokenParameters.RequireDerivedKeys = false;
// Augment the binding element to require the client's X509 certificate as an endorsing token in the message
messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);
// Create a CustomBinding based on the constructed security binding element.
return new CustomBinding(messageSecurity, httpsTransport);
此客户端生成的 SOAP 消息非常接近于满足我正在调用的服务的要求,唯一的问题是 wsa:To 地址以及 TimeStamp 地址正在被签名。
有没有办法准确指定哪些 WCF header 已签名?因为我需要限制客户端只签署 TimeStamp header 。
最佳答案
使用自定义邮件 header ,您可以这样做:
//... rest of MessageContract
[MessageHeader(ProtectionLevel = ProtectionLevel.Sign)]
string MyCustomHeader;
//... rest of MessageContract
但我认为这不会适用于您的情况,因为您试图签署由您的自定义绑定(bind)插入的 soap header 。要修改这些 header ,您可能需要实现 IClientMessageInspector interface并向客户端配置添加自定义行为以签署 TimeStamp header 。不确定您将如何访问证书来进行签名,但是 this may give you a good start.
关于c# - 如何将 WCF 配置为仅签署 TimeStamp header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5935741/
我是一名优秀的程序员,十分优秀!