这是this question here的后续内容。可能与此没有直接关系。
我正在尝试使用从安全令牌服务获取的令牌(联合安全性,WS-Trust 1.3)来调用Web服务。我有SecurityToken
(通用XML),我创建了一个ChannelFactory<T>
,然后我调用CreateChannelWithIssuedToken
。
尝试调用服务方法时出现实际错误。消息很短,我实际上不知道下一步要查看的内容:MessageSecurityException
和消息无法创建令牌引用。嗯,这可能意味着什么。
相关代码:
var binding = new WS2007FederationHttpBinding(WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;
var factory = new ChannelFactory<IService>(
binding,
new EndpointAddress("..."));
factory.Credentials.SupportInteractive = false;
var token = STSClient.Issue();
_channel = factory.CreateChannelWithIssuedToken(token);
调用该服务是:
var svcParams = ...;
//MessageSecurityException is thrown here
var svcResponse = _channel.SomeServiceMethod(params);
我想知道的是我在哪里可以看到下一个。什么可能导致此错误?
其他详情:
答案 0 :(得分:2)
实际上,问题是联邦绑定的配置不足。因为我已经拥有令牌并且已经签名,所以我应该将邮件安全性的IssuedKeyType
设置为SecurityKeyType.BearerKey
。
通过进一步发挥这一点,事实证明,每当有足够的细节将令牌嵌入到请求中时,Unable to create token reference
就被抛出(通常它在绑定或绑定的{{}上缺少配置。 1}})。
这并不能完全解决整个“使用令牌调用服务”的问题,但它确实解决了这个特定的错误:
TransportSecurityBindingElement