1

我正在使用Asp.net Core 3.1. 在使用 Visual Studio 创建新的 Web 项目时,我们选择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了 empty 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在设置它们后使用函数和传递选项。但我想使用微软的默认实现。并且只需要更新作为参数JwtBearerOptions传递给我的那个。AddJwtBearer

4

1 回答 1

2

您可以尝试在之后覆盖特定架构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"
    };
});
于 2020-01-06T09:29:49.820 回答