【发布时间】:2021-03-29 15:56:41
【问题描述】:
Dotnet 核心 3.1。我有两个自定义身份验证方案和处理程序。当控制器操作具有[Authorize] 属性时,两个处理程序都会被触发。当没有[Authorize] 属性时,只会触发默认方案。我不能将 Authorize 属性放在控制器操作上,但仍需要获取第二个 Auth 方案设置的声明。如何确保不仅触发默认身份验证处理程序?
这是我的简化 setup.cs:
services
.AddAuthentication("Auth1")
.AddScheme<AuthenticationSchemeOptions, Auth1>("Auth1", null)
.AddScheme<AuthenticationSchemeOptions, Auth2>("Auth2", null);
services
.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.AddAuthenticationSchemes("Auth1", "Auth2")
.Build();
});
Auth1 和 Auth2 处理程序是这样的(也仅用于演示):
public class Auth1 : AuthenticationHandler<AuthenticationSchemeOptions>
{
....
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
return Task.FromResult(AuthenticateResult.NoResult());
}
}
public class Auth2 : AuthenticationHandler<AuthenticationSchemeOptions>
{
....
protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
return Task.FromResult(AuthenticateResult.NoResult());
}
}
【问题讨论】: