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

时间:2014-08-06 05:32:37

标签: asp.net-mvc security rest 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的内容)

对此的任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:5)

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

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

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

祝你好运!

答案 1 :(得分:3)

您想要实现自己的IUserStore,然后将引用传递给UserManager。通过单独的用户帐户身份验证查看标准版ASP.NET MVC中的Startup和IdentityConfig文件,以查看如何使用它们。

您可以查看here以获取具有实体框架的IUserStore实现。这是一个模板,您可以从您的需求开始并根据需要进行更改。但是,您不必实现所有接口,只需实现您真正需要的接口。 UserManager能够处理它(如果你调用一个需要一个你没有实现的接口的方法,它会抛出异常。)

答案 2 :(得分:-1)