web-dev-qa-db-fra.com

Comment définir plusieurs audiences dans le middleware "AddJwtBearer" Asp.Net Core 2.0?

J'ai un Asp.Net Core 2.0 WebApi qui s'authentifie contre AAD:

            services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
                .AddJwtBearer(options =>
                            {
                                options.Authority = "https://login.microsoftonline.com/TENANT.onmicrosoft.com";
                                options.Audience = "CLIENT_ID";
                            });

Mon application SPA obtient le jeton d'AAD et l'a envoyé en tant qu'en-tête bearer. Tout fonctionne bien.

J'ai créé un travail dans Azure Scheduler et configuré Active Directory OAuth: Job - Active Directory OAuth

Après avoir exécuté un travail, j'obtiens cette erreur: Bearer error="invalid_token", error_description="The audience is invalid".

Lorsque je mets options.Audience Dans AddJwtBearer(...) sur https://management.core.windows.net/ Le Job fonctionne mais pas le SPA.

Je suppose que je dois définir Audience sur un tableau ['CLIENT_ID', "https://management.core.windows.net/"] Mais le options.Audience Est de type string. Si je ne mets pas du tout Audience, Spa et Job ne fonctionnent pas (401 non authentifiés). Régler Audience sur CLIENT_ID,https://management.core.windows.net/ Ne fonctionne pas non plus.

Existe-t-il un moyen d'activer plusieurs audiences dans AddJwtBearer?

20

Je pense avoir rencontré le même problème que vous. Pour que cela fonctionne, j'ai déplacé le public de options vers TokenValidationParameters, qui accepte plusieurs entrées. Vérifiez le code ci-dessous:

.AddJwtBearer(options =>
{
    options.Authority = "https://login.windows.net/trades.no";
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidAudiences = new List<string> 
        {
            "AUDIENCE1",
            "AUDIENCE2" 
        }
    };
39
Pantani