Как установить JwtBearerOptions после вызова функции AddJwtBearer (jwtBearerScheme, o => {}); с пустыми опциями в asp. net ядре? - PullRequest
0 голосов
/ 06 января 2020

Я использую Asp.net Core 3.1. При создании нового веб-проекта с использованием Visual Studio мы выбираем шаблон API и меняем значение Аутентификация на Individual User Accounts, настраиваем параметры Azure ADB2C и, наконец, создаем проект.

В нашем сгенерированном файле Startup.cs есть следующая функция:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
        .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
    services.AddControllers();
}

Реализация AddAzureADB2CBearer() может быть найдена здесь . Эта реализация имеет следующую строку кода:

builder.Services.Configure(scheme, configureOptions);
    builder.AddJwtBearer(jwtBearerScheme, o => { });

В приведенной выше строке добавляется JwtBearer с пустым JwtBearerOptions. И аутентификация работает отлично. Но я хочу установить JwtBearerOptions после следующей строки кода:

services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
   .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));

Можно ли настроить эти параметры после выполнения двух вышеупомянутых строк? Я пробовал следующие строки, но ничего не получалось.

services.Configure<JwtBearerOptions>(options =>
{
     options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
     options.Events = new JwtBearerEvents
     {
         OnAuthenticationFailed = AuthenticationFailed
     };

     options.TokenValidationParameters = new TokenValidationParameters()
     {
          ValidateLifetime = true,
          ValidateAudience = true,
          ValidAudience = "myAudience"
      };
});

Обратите внимание, что я могу использовать функцию AddJwtBearer и передавать параметры после их настройки. Но я хочу использовать реализацию Microsoft по умолчанию. И просто нужно обновить мой JwtBearerOptions, который был передан AddJwtBearer в качестве аргумента.

1 Ответ

1 голос
/ 06 января 2020

Вы можете попытаться переопределить указанную схему c после AddAzureADB2CBearer:

services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
    .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));

services.Configure<JwtBearerOptions>(AzureADB2CDefaults.JwtBearerAuthenticationScheme, options =>
{
    options.TokenValidationParameters.ValidateIssuer = false; // accept several tenants (here simplified)
    options.Events = new JwtBearerEvents
    {
        OnAuthenticationFailed = AuthenticationFailed
    };

    options.TokenValidationParameters = new TokenValidationParameters()
    {
        ValidateLifetime = true,
        ValidateAudience = true,
        ValidAudience = "myAudience"
    };
});
...