C# 无法跟踪使用CreateChannelWithIssuedToken创建的WCF客户端的错误
这是本书的后续部分。可能与此没有直接关系 我试图调用一个由令牌(federated security,WS-Trust 1.3)保护的web服务,该令牌是我从安全令牌服务获得的。我有C# 无法跟踪使用CreateChannelWithIssuedToken创建的WCF客户端的错误,c#,wcf,ws-security,ws-trust,C#,Wcf,Ws Security,Ws Trust,这是本书的后续部分。可能与此没有直接关系 我试图调用一个由令牌(federated security,WS-Trust 1.3)保护的web服务,该令牌是我从安全令牌服务获得的。我有SecurityToken(通用XML),我创建了一个ChannelFactory,然后调用CreateChannelWithIssuedToken 当我尝试调用服务方法时,实际错误出现。消息很短,实际上我不知道下一步该看哪里:MessageSecurityException和message无法创建令牌引用。嗯,这可
SecurityToken
(通用XML),我创建了一个ChannelFactory
,然后调用CreateChannelWithIssuedToken
当我尝试调用服务方法时,实际错误出现。消息很短,实际上我不知道下一步该看哪里:MessageSecurityException
和message无法创建令牌引用。嗯,这可能意味着什么
有关守则:
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);
我想知道的是我下一步可以去哪里。什么可能导致此错误
其他详情:
实际上,问题在于联合绑定的配置不足。因为我已经拥有令牌并且它已经签名,所以我应该将消息security上的
IssuedKeyType
设置为SecurityKeyType.BearerKey
通过进一步使用,每次当没有足够的细节将令牌嵌入请求时(通常在绑定或绑定的TransportSecurityBindingElement
上缺少配置),就会抛出无法创建令牌引用
这并不能完全解决整个“使用令牌调用服务”问题,但它确实解决了这个特定错误:
var binding = new WS2007FederationHttpBinding(WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Message.IssuedKeyType = SecurityKeyType.BearerKey;
binding.Security.Message.NegotiateServiceCredential = false;
这有点像暗中捅了一刀,但我想可能是运行WCF服务的服务器和用于签署请求的证书的信任问题。也就是说,服务器不信任签名CA。@BenRobinson:谢谢,但错误甚至在发送请求之前就发生了。我猜是在构建SOAP消息时。另外,服务器端不是WCF(实际上,我不知道它是什么)。我将更新问题以反映这一点。
var binding = new WS2007FederationHttpBinding(WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Message.IssuedKeyType = SecurityKeyType.BearerKey;
binding.Security.Message.NegotiateServiceCredential = false;