Как установить несколько аудиторий в Asp.Net ядро 2.0" AddJwtBearer " промежуточное ПО?

у меня есть 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 заголовок. Все работает нормально.

я создал задание в планировщике и настройке Azure Active Directory OAuth: Job - Active Directory OAuth

после выполнения задания я получаю эту ошибку: Bearer error="invalid_token", error_description="The audience is invalid".

когда я поставил options.Audience на AddJwtBearer(...) to https://management.core.windows.net/ работа работает, но не СПА.

Я думаю, мне нужно установить Audience в массиве ['CLIENT_ID', "https://management.core.windows.net/"] но options.Audience тип string. Если я не установлю Audience на всех, и спа и работа не работают (401 unauthenticated). Настройка Audience to CLIENT_ID,https://management.core.windows.net/ не работает.

есть ли способ включить несколько аудиторий в AddJwtBearer?

1 ответов


Я думаю, что столкнулся с той же проблемой, что и вы. Чтобы заставить его работать, я переместил аудиторию из 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" 
        }
    };