web-dev-qa-db-ja.com

SecurityTokenInvalidAudienceException:IDX10214:オーディエンス検証に失敗しました

IdentityとSustainsys.Saml2(SAML認証用)を使用してASP.NET Core 2アプリを開発しています。 Startup.csファイルで必要な構成を行いました。プロジェクトを実行し、SAML2を使用して(外部ログインとして)ログインしようとすると、資格情報を入力した後に次のエラーが表示されます。

SecurityTokenInvalidAudienceException:IDX10214:オーディエンスの検証に失敗しました。対象者:「[PIIは非表示]」。一致しませんでした:validationParameters.ValidAudience: '[PII is hidden]'またはvalidationParameters.ValidAudiences: '[PII is hidden]'。 Microsoft.IdentityModel.Tokens.Validators.ValidateAudience(IEnumerable audiences、SecurityToken securityToken、TokenValidationParameters validationParameters)Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler.ValidateConditions(Saml2SecurityToken samlToken。TokenValidationParametersvalidationParametermlmlTokenTokenmlmlTokenTokenmlmlTokenParametermlmlTokenTokenmlml)TokenParametermlml.TokenParametermlml)トークン、TokenValidationParameters validationParameters、out SecurityToken validatedToken)Sustainsys.Saml2.Saml2P.Saml2Response + d__60.MoveNext()System.Collections.Generic.List..ctor(IEnumerable collection)System.Linq.Enumerable.ToList(IEnumerable source)Sustainsys。 。 Saml2.AspNetCore2.Saml2 Handler + d__12.MoveNext()System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)Microsoft.AspNetCore.Authentication.AuthenticationMiddleware + d__6.M.Runtime(Next) CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware + d__4.MoveNext(Task.Sucs.Task.Suc.SuccessArc.Task.SuccessA.S.Success(タスク) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware + d__6.MoveNext()System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()Microsoft.AspNetCore.MedureCoreFrameworkError.EntityFrameFrame .MoveNext()System.Runtime.CompilerServices.Task Awaiter.ThrowForNonSuccess(Task task)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware + d__7.MoveNext()

これの意味がわかりません。何か不足していますか?

これが私がスタートアップファイルに持っているものです

services.AddAuthentication()
        .AddSaml2(options => 
        {
            var spOptions = new SPOptions
            {
                EntityId = new EntityId("https://localhost:44373/Saml2"),
                ReturnUrl = new Uri("https://localhost:44373"),
                MinIncomingSigningAlgorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1",                  
            };                

            options.SPOptions = spOptions;
            options.IdentityProviders.Add(new IdentityProvider(new EntityId("https://www.example.com/SSO/SAML/App"), options.SPOptions)
            {
                AllowUnsolicitedAuthnResponse = false,                  
                MetadataLocation = "https://www.example.com/SSO/SAMLMetadata/App",                  
                LoadMetadata = true,                  
            }); 
        });

前もって感謝します...

3
OnlyOneEA

私の知る限り、このエラーは、SAMLトークンに入ってきたオーディエンスがスタートアップ構成の値と異なることを明確に示しています。これらの値を比較すると役立つ場合があります。大文字と小文字を区別する比較が原因で検証が失敗する場合があるため、オーディエンスがトークンと構成になっている場合は注意が必要です。

ソースコード( Saml2Response )によると Anders Abel が指摘しているように、ValidAudienceプロパティは、ここで設定するSPOptions.EntityIdから初期化されます。

var spOptions = new SPOptions
{
    EntityId = new EntityId("https://localhost:44373/Saml2"),
    ReturnUrl = new Uri("https://localhost:44373"),
    MinIncomingSigningAlgorithm = "http://www.w3.org/2000/09/xmldsig#rsa-sha1",                  
};

したがって、設定したEntityId値を、次のようなsaml-tokenの値と比較する必要があります。

<saml:Audience>The value here should be the same as in your startup configuration</saml:Audience>
8
NamiraJV