首页 > 解决方案 > 扩展 ASP.NET Core 中现有 AuthenticationScheme 的首选解决方案

问题描述

我正在尝试集成一个非常简单的身份验证方案,该方案基本上可以分解为:

我的第一种方法看起来有点像这样:

虽然这在技术上可行,但我认为更简洁的解决方案是将 ID 解析视为方案本身的一部分,而不需要包含中间件。

有没有一种简单的方法可以做到这一点?也许通过继承 AuthenticationHandler 使用的Negotiate?结果应如下所示:

  services.AddAuthentication(MyCustomNegotiateAuthenticationScheme.Name)
            .AddCustomNegotiate();

现在应该不需要额外的中间件,只需调用

UseAuthentication()

(中提供的方案DefaultIdentity做了类似的事情,它只需要服务配置,并且从 cookie 中包含所需的声明。)

标签: asp.net-coreauthentication.net-corewindows-authentication

解决方案


我建议您查看身份验证方案的事件。您可以在那里操纵主体以及身份验证流程。(事件通常使用返回 Task 的 Func,因此您可以在那里使用 async-await。)

例如,使用 cookie auth 您可以执行以下操作:

services.AddAuthentication()
    .AddCookie(options => 
    {
        options.Events.OnValidatePrincipal = context => { your logic goes here... }
    });

另一种方法可能是为这些类之一创建自定义实现:

在这种方法中,我将从其中一个继承,并尝试覆盖其中一个(受保护的或公共的)方法。你可以在这里找到它的当前实现。


推荐阅读