Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法跟踪使用CreateChannelWithIssuedToken创建的WCF客户端的错误_C#_Wcf_Ws Security_Ws Trust - Fatal编程技术网

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

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无法创建令牌引用。嗯,这可

这是本书的后续部分。可能与此没有直接关系

我试图调用一个由令牌(federated security,WS-Trust 1.3)保护的web服务,该令牌是我从安全令牌服务获得的。我有
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);
我想知道的是我下一步可以去哪里。什么可能导致此错误

其他详情:

  • 该错误在向服务器发出任何请求之前抛出(通过Fiddler检查)
  • 服务器不是基于WCF的。它是符合WS-Trust和WS-Security的服务

  • 实际上,问题在于联合绑定的配置不足。因为我已经拥有令牌并且它已经签名,所以我应该将消息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;