この投稿に続いて、次のWCFクライアントを作成しました。
- ADFSを使用して、ADに対してユーザーを認証します。
- 発信者にSAML2チケットを提供します。
- 提供されたSAML2チケットを使用して、WCFサービスを呼び出します。
これはうまく機能していますが、私の問題の次の部分は、AzureACSを使用するようにこれを拡張することです。
RPをACSに追加し、VisualStudioで使用するACSを指すようにSTS参照を変更しましたAdd STS Reference
。
メソッドを拡張Token.GetToken
し、トークンを次のメソッドに提供しました。
public static SecurityToken GetToken(SecurityToken adfsToken, string appliesTo, string idpEndpointAddress, out RequestSecurityTokenResponse rsts)
{
WS2007HttpBinding binding = new WS2007HttpBinding();
binding.Security.Message.EstablishSecurityContext = false;
binding.Security.Mode = SecurityMode.TransportWithMessageCredential;
WSTrustChannelFactory trustChannelFactory = new WSTrustChannelFactory(binding, new EndpointAddress(idpEndpointAddress));
trustChannelFactory.TrustVersion = TrustVersion.WSTrust13;
trustChannelFactory.ConfigureChannelFactory();
// Create issuance issuance and get security token
RequestSecurityToken requestToken = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue);
requestToken.AppliesTo = new EndpointAddress(appliesTo);
WSTrustChannel tokenClient = (WSTrustChannel)trustChannelFactory.CreateChannelWithIssuedToken(adfsToken);
SecurityToken token = tokenClient.Issue(requestToken, out rsts);
return token;
}
次のエンドポイントへ:
https://test.accesscontrol.windows.net/v2/wstrust/13/issuedtoken-symmetric
しかし、次の例外が発生します。
リモートエンドポイントとのセキュリティネゴシエーションが失敗したため、セキュリティで保護されたチャネルを開くことができません。これは、チャネルの作成に使用されたEndpointAddressにEndpointIdentityがないか、正しく指定されていないことが原因である可能性があります。EndpointAddressによって指定または暗黙的に指定されたEndpointIdentityがリモートエンドポイントを正しく識別していることを確認してください。
内部の例外を除いて:
ACS10001:SOAPヘッダーの処理中にエラーが発生しました。
- ADFSによって提供されるトークンでこれを機能させるには、ACSで何を構成する必要がありますか?
- ACSが提供するトークンを使用する必要がありますか、それともADFSが提供するトークンをサービスで使用できますか?(動作しているようです。)