在.NET Core 2.0中扩展身份验证中间件的正确方法



我正在尝试找出正确的方法在.NET Core 2.0 WebAPI项目中扩展身份验证。

我正在使用实体框架商店的身份。我已经配置了使用AddAuthentication()UseAuthentication()的身份验证的服务。

我正在使用JWT令牌通过AddJwtBearer()进行身份验证。现在我想添加API为我处理两件事:

  1. 验证用户名和密码,并在"实体框架身份识别商店中有匹配"(如果有匹配项中)发出JWT令牌。这部分非常容易,我只需将SignInManager注入我的Account控制器即可实现。

  2. 如果找不到用户,我想使用自定义身份验证流,并验证用户是否存在在其他"位置"中,如果有匹配项 - 在身份店中创建用户。现在,这就是我试图找出最佳方法。

唯一想到的是将此登录流程构建到我的Account控制器中,通过EF Identity Store验证用户名/密码,然后使用我的自定义商店进行验证,如果找到匹配匹配,请致电"新用户"方法从Account控制器手动。但是,这种方法对我来说并不适合我,因为在.NET 1.1中,这是通过建立自己的身份验证中间的解决方案来解决的。但是,我找不到.NET 2.0方法的任何文档。

解决问题的最佳方法是什么?

这似乎更像是样式/设计问题。

a)您确实可以将所有内容都放入AccountController,在"登录"期间,您可以将"注册"添加到其中(如果您找到"外部"匹配的'用户凭证),几乎是您建议的。

我看不到这样做的巨大缺点(尽管我通常更喜欢中间件,因为您可以在启动中"配置"事物)。

设计明智的是,可能存在一个问题,将您的外部提供商与内部身份商店同步(如果是这种情况,通常就是这样),但这适用于这些选项中的任何一个。通常,引入专门的授权服务器可以解决这一点,但我不知道足够的细节,所以只是猜测。

b)如果我读了你写你想要的东西,
添加auth。中间件我使用了这样的东西(基于它):
TokenProviderMiddleware
(该GitHub解决方案是一个很好的例子)

基本上(总结一些代码):
您可以从配置(启动)中调用类似app.UseTokenProvider();的内容。

app.UseTokenProvider(_tokenProviderOptions);  
// or directly (w/o the extension method)
app.UseMiddleware<TokenProviderMiddleware>();  
...

...且TokenProviderMiddleware具有一定的签名以满足(将链中的下一个注入.ctor和 public Task Invoke(HttpContext context)

这使您可以跳过控制器,或者尽可能多地这样做。

不确定这是否解决了您的麻烦,但它帮助我做了类似的事情。

最新更新