2

これは、この質問 hereのフォローアップです。直接関係ないかも。

Secure Token Service から取得したトークン (フェデレーション セキュリティ、WS-Trust 1.3) で保護された Web サービスを呼び出そうとしています。SecurityToken(ジェネリック XML)があり、 を作成しChannelFactory<T>てから を呼び出しますCreateChannelWithIssuedToken

サービス メソッドを呼び出そうとすると、実際のエラーが表示されます。メッセージは非常に短く、実際には次にどこを見るべきかわかりません:MessageSecurityExceptionおよびメッセージUnable to create token reference . まあ、それは何を意味することもできます。

関連するコード:

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 に準拠したサービスです。
4

1 に答える 1

2

実際、問題はフェデレーション バインディングの構成が不十分でした。私はすでにトークンを持っていて、すでに署名されているのでIssuedKeyType、メッセージのセキュリティを に設定する必要がありましたSecurityKeyType.BearerKey

これをさらにUnable to create token referenceいじると、リクエストにトークンを埋め込むのに十分な詳細がない場合に毎回スローされることがわかります (通常、バインディングまたはバインディングの に構成がありませんTransportSecurityBindingElement)。

これは、「トークンを使用してサービスを呼び出す」問題全体を完全に解決するわけではありませんが、この特定のエラーは解決します。

var binding = new WS2007FederationHttpBinding(WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Message.IssuedKeyType = SecurityKeyType.BearerKey;
binding.Security.Message.NegotiateServiceCredential = false;
于 2014-09-08T09:28:11.037 に答える