使用自定义身份验证提供程序/服务的ASP.Net标识

Stu*_*son 11 security rest asp.net-mvc asp.net-identity

我目前正在开发一个需要用户名和密码验证的ASP.Net MVC Web应用程序.我开始考虑使用ASP.Net Identity,但是我有一个非常重要的要求,要求是Web应用程序本身无法直接访问任何数据库,所有DB Access都将通过内部REST服务公开给应用程序.这是由于我们遵循的某些安全政策.

我意识到ASP.Net身份能够支持外部身份验证方法,但我的问题分为两部分.

1)如何配置ASP.Net Identity以使用我的自定义REST服务进行身份验证?

2)我如何开发可由Identity用于身份验证的服务?(需要从服务返回到ASP.Net Identity的内容)

任何有关这方面的帮助将非常感激.

Phi*_*son 5

我刚刚做了你要问的事.首先,正如FPar建议的那样,您需要实现IUserStore并将其传递给您的UserManager.您的自定义IUserStore将实现该接口,我使用Resharper生成存根,但不使用实体框架,您将使用HttpClient来调用您的REST服务.

对于您实际需要的每个接口方法,REST服务将在控制器上执行一个操作,我调用了我的identityController.我实现了userstore,userloginstore和rolestore,以及我实际使用的大约10个调用的代码.然后,identitycontroller实际访问数据库.

我还保留了完全异步模式,使用异步REST调用和数据库外观,无论是否有实体框架.关于IUserLoginStore :: AddLoginAsync,我的数据访问代码的缩短版本是另一个问题.在那个类中,我实际上使用了用户存储的原始实体框架实现来完成部分工作,并最终在普通(除了异步)ado.net上找到了我无法以这种方式工作的部分.表格很简单,使用您选择的ORM不会花费很多时间.

祝好运!


小智 3

您想要实现自己的IUserStore ,然后传递对UserManager 的引用。查看具有个人用户帐户身份验证的标准 ASP.NET MVC 中的 Startup 和 IdentityConfig 文件,了解如何使用它们。

您可以在此处查找带有实体框架的 IUserStore 实现。这是一个模板,您可以从它开始并根据您的需要进行更改。但是,您不必实现所有接口,只需实现您真正需要的接口即可。UserManager 能够处理这个问题(如果您调用一个需要接口但未实现的方法,它会抛出异常。)