如何在Asp.Net Core 2.0"AddJwtBearer"中间件中设置多个受众?

Sko*_*šek 21 jwt azure-active-directory asp.net-core-2.0

我有一个Asp.Net Core 2.0 WebApi,它针对AAD进行身份验证:

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

我的SPA应用程序从AAD获取令牌并将其作为bearer标头发送.一切正常.

我在Azure Scheduler中创建了一个Job并进行了设置Active Directory OAuth: 作业 - 活动目录OAuth

在运行一个工作后,我得到了这个错误:Bearer error="invalid_token", error_description="The audience is invalid".

当我设置options.AudienceAddJwtBearer(...),以https://management.core.windows.net/作业的作品,但不是SPA.

我想,我需要设置Audience一个数组['CLIENT_ID', "https://management.core.windows.net/"]但是options.Audience类型是string.如果我没有设置Audience,Spa和Job都不起作用(401未经身份验证).设置AudienceCLIENT_ID,https://management.core.windows.net/也不行.

有没有办法如何启用多个受众AddJwtBearer

Pan*_*ani 46

我想我遇到了和你一样的问题.为了使其工作,我将观众从中移入options并接入TokenValidationParameters,接受多个条目.检查以下代码:

.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" 
        }
    };
Run Code Online (Sandbox Code Playgroud)

  • 这正是我想要的.作品.谢谢. (3认同)