Mor*_*rse 8 c# authentication asp.net-core
我的应用程序中有两种身份验证方案
services.AddAuthentication("default")
.AddJwtBearer("default", options =>
{
// some options
})
.AddJwtBearer("non-default", options =>
{
// some other options
});
Run Code Online (Sandbox Code Playgroud)
这个想法是对大多数控制器使用默认值,并且当需要非默认值时,使用 明确提及所需的模式[Authorize(AuthenticationSchemes = "non-default")]。问题是,即使设置了非默认模式,默认模式也总是被调用。它运行并失败,然后正确的模式运行并成功。但这会导致日志中充满“无法验证令牌”消息。有没有办法禁用默认架构?
我使用 net core 2.2,但考虑迁移到 3.1。
Mor*_*rse 10
我发现解决方案不是提供默认的身份验证方法,而是提供默认的授权策略。
services.AddAuthentication()
.AddJwtBearer("defaultScheme", options =>
{
// some options
})
.AddJwtBearer("nonDefaultScheme", options =>
{
// some other options
});
services.AddAuthorization(opts =>
{
opts.DefaultPolicy = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes("defaultScheme")
.RequireAuthenticatedUser()
.Build();
opts.AddPolicy("non-default", policy => policy
.AddAuthenticationSchemes("nonDefaultScheme")
.RequireAuthenticatedUser());
});
Run Code Online (Sandbox Code Playgroud)
此后两者[Authorize]都[Authorize("non-default")]可以正常工作,只调用其中一种认证方案。
| 归档时间: |
|
| 查看次数: |
3461 次 |
| 最近记录: |