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

时间:2017-10-28 13:58:02

标签: jwt azure-active-directory asp.net-core-2.0

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

            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标头发送。一切正常。

我在Azure Scheduler中创建了一个Job并设置Active Directory OAuthJob - Active Directory OAuth

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

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

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

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

1 个答案:

答案 0 :(得分:36)

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