san*_*tro 2 c# visual-studio-2019 asp.net-core-3.1
我有 asp.net core 3.1 web api 项目,代码如下:
启动.cs
public virtual void ConfigureServices(IServiceCollection services) =>
services
.AddFrameworkServices()
.AddApplicationInsights(this.configuration)
.AddResponseCompression()
.AddCustomConfigureOptions();
Run Code Online (Sandbox Code Playgroud)
CustomServiceCollectionExtensions.cs
public static IServiceCollection AddCustomConfigureOptions(this IServiceCollection services) =>
services
.ConfigureOptions<ConfigureAuthenticationOptions>();
.ConfigureOptions<ConfigureJwtBearerOptions>();
Run Code Online (Sandbox Code Playgroud)
配置身份验证选项.cs
public class ConfigureAuthenticationOptions : IConfigureOptions<AuthenticationOptions>
{
public void Configure(AuthenticationOptions options) =>
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}
Run Code Online (Sandbox Code Playgroud)
配置JwtBearerOptions
public class ConfigureJwtBearerOptions : IConfigureOptions<JwtBearerOptions>
{
private readonly IConfiguration configuration;
public ConfigureJwtBearerOptions(IConfiguration configuration) => this.configuration = configuration;
public void Configure(JwtBearerOptions options)
{
options.Authority = configuration[C.AppKeys.AADInstance] + configuration[C.AppKeys.AADTenantID];
options.Audience = configuration[C.AppKeys.AADAudience];
}
}
Run Code Online (Sandbox Code Playgroud)
在调试时我发现ConfigureJwtBearerOptions.cs文件的Configure方法没有被触发
任何人都可以帮助我指导解决这个问题
我正在使用 .Net Core 6 并遇到同样的错误。这里的巧妙之处在于 .AddJwtBearer() 使用命名选项委托。
不实现 IConfigureOptions,而是实现 IConfigureNamedOptions
配置JwtBearerOptions.cs
public class ConfigureJwtBearerOptions : IConfigureNamedOptions<JwtBearerOptions>
{
private readonly JwtOptions config;
private readonly ILogger<ConfigureJwtBearerOptions> logger;
/// <summary>
/// Configure JWT auth
/// </summary>
/// <param name="jwtOptions"></param>
/// <param name="logger"></param>
public ConfigureJwtBearerOptions(JwtOptions jwtOptions, ILogger<ConfigureJwtBearerOptions> logger)
{
config = jwtOptions;
this.logger = logger;
}
/// <inheritdoc/>
public void Configure(JwtBearerOptions options)
{
Configure(JwtBearerDefaults.AuthenticationScheme, options);
}
public void Configure(string name, JwtBearerOptions options)
{
options.Authority = config.Authority;
options.Audience = config.Audience;
logger.LogInformation("OAuth authority: {0}", config.Authority);
logger.LogInformation("OAuth audience: {0}", config.Audience);
//...
}
}
Run Code Online (Sandbox Code Playgroud)
另外,您仍然需要在 Startup.cs 中调用 AddAuthentication()
启动.cs
//...
services.AddAuthentication().AddJwtBearer();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1417 次 |
| 最近记录: |