【发布时间】:2014-06-02 12:39:44
【问题描述】:
我正在尝试使用 WCF 配置安全令牌服务,以便它可以使用 WSSecureConversationFebruary2005 命名空间创建令牌 (SessionSecurityToken)。 SessionSecurityToken 类具有属性 SecureConversationVersion 理论上可以设置为我想要的值。不幸的是,默认情况下它不是,我看不到改变它的方法。在分析了源代码后,我注意到有一个构造函数可以改变这个值,但它是内部的。
我用于托管 STS 的代码如下所示:
BindingElementCollection bindings = new BindingElementCollection();
SecurityBindingElement security = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
security.AllowInsecureTransport = true;
security.EnableUnsecuredResponse = true;
security.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
bindings.Add(security);
TextMessageEncodingBindingElement textMessageEncoding = new TextMessageEncodingBindingElement();
bindings.Add(textMessageEncoding);
textMessageEncoding.MessageVersion = MessageVersion.Soap11WSAddressingAugust2004;
HttpTransportBindingElement httpsTransport = new HttpTransportBindingElement();
bindings.Add(httpsTransport);
var myBinding = new CustomBinding(bindings);
var host = new WSTrustServiceHost(Configuration, new Uri(BaseAddress));
host.AddServiceEndpoint(
typeof(IWSTrustFeb2005SyncContract),
myBinding,
STS_ADDRESS);
示例响应如下所示:
<t:RequestedSecurityToken>
<SecurityContextToken d6p1:Id="_6d497e66-9851-4b74-bf6d-e5f46c652837-35820CA1B23B6109FC1DC2F6A0D3ACC3"
xmlns:d6p1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns="http://docs.oasis-open.org/ws-sx/ws-secureconversation/200512">
<Identifier>urn:uuid:b067f4fc-0adc-4e78-98a5-449c6b58c234</Identifier>
<Cookie xmlns="http://schemas.microsoft.com/ws/2006/05/security"></Cookie>
</SecurityContextToken>
</t:RequestedSecurityToken>
但我希望使用 schemas.xmlsoap.org/ws/2005/02/sc 而不是 docs.oasis-open.org/ws-sx/ws-secureconversation/200512
【问题讨论】: