如何:设置签名确认
签名确认是消息发起方使用的一种机制,用于确保接收到的答复是为响应发送方的原始消息而生成的。 WS-Security 1.1 规范中对签名确认进行了定义。 如果终结点支持 WS-Security 1.0,则不能使用签名确认。
下面的过程指定如何使用 AsymmetricSecurityBindingElement 来启用签名确认。 可以对 SymmetricSecurityBindingElement 使用相同的过程。 该过程以如何:使用 SecurityBindingElement 创建自定义绑定中的基本步骤为基础。
在代码中启用签名确认
创建的 BindingElementCollection 类的实例。
创建的 SymmetricSecurityBindingElement 类的实例。
将 RequireSignatureConfirmation 设置为
true
。将安全元素添加到绑定集合中。
按照如何:使用 SecurityBindingElement 创建自定义绑定中的说明创建自定义绑定。
在配置中启用签名确认
将
<customBinding>
元素添加到配置文件的<bindings>
节。添加一个
<binding>
元素,并将 name 属性设置为适当的值。添加一个适当的编码元素。 下面的示例添加了一个
<TextMessageEncoding>
元素。添加一个
<security>
子元素并将requireSignatureConfirmation
属性设置为true
。可选。 若要在启动过程中启用签名确认,请添加一个 <secureConversationBootstrap> 子元素并将
requireSignatureConfirmation
属性设置为true
。添加一个适当的传输元素。 下面的示例添加 <httpTransport>:
<bindings> <customBinding> <binding name="SignatureConfirmationBinding"> <security requireSignatureConfirmation="true"> <secureConversationBootstrap requireSignatureConfirmation="true" /> </security> <textMessageEncoding /> <httpTransport /> </binding> </customBinding> </bindings>
示例
下面的代码创建 SymmetricSecurityBindingElement 的实例并将 RequireSignatureConfirmation 属性设置为 true
。 请注意,此示例不使用上一示例中所示的 <secureConversationBootstrap>
元素。 此示例演示了使用 Windows(Kerberos 协议)令牌时的签名确认。 在本例中,在来自服务的所有响应中均返回客户端的签名,并且该签名由客户端进行确认。
private Binding CreateBinding()
{
BindingElementCollection bindings = new BindingElementCollection();
KerberosSecurityTokenParameters tokens = new KerberosSecurityTokenParameters();
SymmetricSecurityBindingElement security =
new SymmetricSecurityBindingElement(tokens);
// Require that every request and return be correlated.
security.RequireSignatureConfirmation = true;
bindings.Add(security);
TextMessageEncodingBindingElement encoding = new TextMessageEncodingBindingElement();
bindings.Add(encoding );
HttpTransportBindingElement transport = new HttpTransportBindingElement();
bindings.Add(transport);
CustomBinding myBinding = new CustomBinding(bindings);
return myBinding;
}
Private Function CreateBinding() As Binding
Dim bindings As New BindingElementCollection()
Dim tokens As New KerberosSecurityTokenParameters()
Dim security As New SymmetricSecurityBindingElement(tokens)
' Require that every request and return be correlated.
security.RequireSignatureConfirmation = True
bindings.Add(security)
Dim encoding As New TextMessageEncodingBindingElement()
bindings.Add(encoding)
Dim transport As New HttpTransportBindingElement()
bindings.Add(transport)
Dim myBinding As New CustomBinding(bindings)
Return myBinding
End Function