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

How to set multiple audiences in Asp.Net Core 2.0 "AddJwtBearer" middleware?

我有一个 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";
                            });

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

我已经在 Azure Scheduler 中创建了一个作业并设置了 Active Directory OAuth

在 运行 作业后我收到此错误:Bearer error="invalid_token", error_description="The audience is invalid"

当我将 AddJwtBearer(...) 中的 options.Audience 设置为 https://management.core.windows.net/ 时,作业有效但 SPA 无效。

我想,我需要将 Audience 设置为数组 ['CLIENT_ID', "https://management.core.windows.net/"],但 options.Audiencestring 的类型。如果我根本不设置 Audience,则 Spa 和 Job 都不起作用(401 未经身份验证)。将 Audience 设置为 CLIENT_ID,https://management.core.windows.net/ 也不起作用。

有没有办法在 AddJwtBearer 中启用多个受众?

我想我 运行 遇到了和你一样的问题。为了让它发挥作用,我将观众从 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" 
        }
    };