1

この投稿に続いて、次のWCFクライアントを作成しました。

  1. ADFSを使用して、ADに対してユーザーを認証します。
  2. 発信者にSAML2チケットを提供します。
  3. 提供された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ヘッダーの処理中にエラーが発生しました。

  1. ADFSによって提供されるトークンでこれを機能させるには、ACSで何を構成する必要がありますか?
  2. ACSが提供するトークンを使用する必要がありますか、それともADFSが提供するトークンをサービスで使用できますか?(動作しているようです。)
4

1 に答える 1

1

リンクされた ACS サンプルを見てください。これは、あなたが求めていることを正確に行っているようです。

于 2012-10-12T00:10:34.250 に答える