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

问题描述 投票:2回答:1

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

我正在使用Identity with Entity Framework存储。我已经使用AddAuthentication()UseAuthentication()配置了支持身份验证的服务。

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

  1. 验证用户名和密码,如果实体框架标识存储中存在匹配项,则发出JWT标记。这部分非常简单,只需将SignInManager注入我的Account控制器即可实现。
  2. 如果未找到用户,我想使用自定义身份验证流程并验证用户是否位于不同的“位置”,如果匹配,则在Identity Store中创建用户。现在,这就是我想要找出最好的方法。

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

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

c# asp.net-core
1个回答
1
投票

这似乎更像是一种风格/设计问题。

A)您确实可以将所有内容放入AccountController,在“登录”期间,您可以添加“注册”作为其中的一部分(如果您发现用户凭据的“外部”匹配),就像您建议的那样。

我没有看到这样做的巨大缺点(虽然我自己更喜欢中间件,因为你可以在启动时更多'配置'东西)。

设计方面,可能存在将外部提供程序与内部标识存储库同步的问题(如果情况通常如此),但这适用于这些选项中的任何一个。经常引入一个专门的授权服务器可以解决这个问题,但我不知道足够的细节,所以只是猜测。

B)如果我正在读你写你想要的东西, 添加身份验证。中间件我用过这样的东西(基于它): TokenProviderMiddleware (那个GitHub solution就是一个很好的例子)

基本上(总结一些代码): 你可以从Configure(启动)中调用类似app.UseTokenProvider();的东西。

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

...并且TokenProviderMiddleware有一定的特征要满足(将链中的下一个注入到.ctor和public Task Invoke(HttpContext context)

这允许您跳过控制器,或者您希望跳过控制器。

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

© www.soinside.com 2019 - 2024. All rights reserved.