1

TransportWithMessageCredential に設定されたエンド ツー エンド セキュリティ モードで WS2007HttpRelayBinding を使用しようとしています。資格情報の種類として IssuedToken を使用しています。サービスを呼び出している ADFS 2.0 からトークンを取得します。オンプレミスの wcf トレース ログで次の情報を取得します。

'Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityToken' トークン タイプのトークン認証子が見つかりません。そのタイプのトークンは、現在のセキュリティ設定に従って受け入れることができません。

更新:
これは私がサービスホストを設定する方法です

ServiceConfiguration serviceConfiguration = new ServiceConfiguration();

            serviceConfiguration.ServiceCertificate = GetServiceCertificateWithPrivateKey();


            serviceConfiguration.CertificateValidationMode = X509CertificateValidationMode.None;


            serviceConfiguration.IssuerNameRegistry = new X509IssuerNameRegistry("localhost");


            serviceConfiguration.SaveBootstrapTokens = true;


            serviceConfiguration.SecurityTokenHandlers.AddOrReplace(new Saml2SecurityTokenHandler());


            serviceConfiguration.SecurityTokenHandlers.Configuration.AudienceRestriction.AllowedAudienceUris.Add(new Uri("https://mynamespace.servicebus.windows.net/Service1/"));



            FederatedServiceCredentials.ConfigureServiceHost(host, serviceConfiguration);

            host.Open();
4

3 に答える 3

3

Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler が追加されているかどうかを確認できますか

  <securityTokenHandlers>
    <add type="Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler" />
  </securityTokenHandlers>

編集:また、証明書の構成を確認してください。

編集: MSDN WCF フォーラムにも役立つかもしれません

于 2012-07-23T13:28:13.910 に答える
1

バインディング セキュリティ要素は、SAML 1.1 トークンを探すように設定されています。「CustomBinding」要素を構築した後、次のコードをサーバーに追加しました

IssuedSecurityTokenParameters issuedTokenParameters = 
            myBinding.Elements.Find<TransportSecurityBindingElement>().EndpointSupportingTokenParameters.Endorsing[0] as IssuedSecurityTokenParameters;
        issuedTokenParameters.TokenType = "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0";
于 2012-07-27T13:40:50.033 に答える
1

アレクセイの答えは、web.config/app.config の変更に最適です。それに加えて、コードでトークン ハンドラーを構成することもできます (方法: ACS によって保護された WCF サービス に対してユーザー名とパスワードで認証する方法のサンプル (docs.microsoft.com) - 方法: ユーザー名とパスワードで認証する方法)。 ):

//
// This must be called after all WCF settings are set on the service host so the
// Windows Identity Foundation token handlers can pick up the relevant settings.
//
ServiceConfiguration serviceConfiguration = new ServiceConfiguration();
serviceConfiguration.CertificateValidationMode = X509CertificateValidationMode.None;

// Accept ACS signing certificate as Issuer.
serviceConfiguration.IssuerNameRegistry = new X509IssuerNameRegistry( GetAcsSigningCertificate().SubjectName.Name );

// Add the SAML 2.0 token handler.
serviceConfiguration.SecurityTokenHandlers.AddOrReplace( new Saml2SecurityTokenHandler() );
于 2012-07-23T13:33:49.133 に答える