【问题标题】:dotnet core multiple auth schemes: authentication handler is not being triggereddotnet core 多个身份验证方案:身份验证处理程序未被触发
【发布时间】: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());
    }
}

【问题讨论】:

    标签: authentication .net-core


    【解决方案1】:

    我获取了您的代码并在 ASP.NET Core 3.1 中复制了它。我想你忘记注册认证中间件了,所以它只是在授权的情况下触发。

    我复制的应用程序的行为与您描述的相同,但是一旦我将下面的行添加到 startup.cs,默认身份验证方案 Auth1 中的断点在调试时开始被捕获。

    app.UseAuthentication();
    

    请记住,将其放在 UseAuthorization 之前,并记住只有 Auth1 会被调用,因为您将其设置为默认身份验证方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 2016-04-26
      • 1970-01-01
      • 2018-02-23
      • 2018-01-28
      • 2015-03-17
      相关资源
      最近更新 更多