无法跟踪使用CreateChannelWithIssuedToken创建的WCF客户端的错误

时间:2014-08-26 15:44:42

标签: c# wcf ws-security ws-trust

这是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); 

我想知道的是我在哪里可以看到下一个。什么可能导致此错误?

其他详情:

  1. 在向服务器发出任何请求之前抛出错误(使用Fiddler检查)。
  2. 服务器不是基于WCF的。这是一些符合WS-Trust和WS-Security的服务。

1 个答案:

答案 0 :(得分:2)

实际上,问题是联邦绑定的配置不足。因为我已经拥有令牌并且已经签名,所以我应该将邮件安全性的IssuedKeyType设置为SecurityKeyType.BearerKey

通过进一步发挥这一点,事实证明,每当有足够的细节将令牌嵌入到请求中时,Unable to create token reference就被抛出(通常它在绑定或绑定的{{}上缺少配置。 1}})。

这并不能完全解决整个“使用令牌调用服务”的问题,但它确实解决了这个特定的错误:

TransportSecurityBindingElement