ASP.NET MVC 5和WebApi 2身份验证

14

我最近建立了一个MVC 5网站作为前端原型,并使用了“个人账户”进行身份验证。现在,我需要构建一个WebApi2后端来为这个网站以及iPhone应用程序和其他多个客户端提供服务。我对MVC网站和WebApi的身份验证感到困惑。

我希望所有用户管理都通过WebApi(使用令牌)进行,以便它是客户端不可知的,但我不知道没有我的Identity类情况下,网站端的Cookie身份验证将如何工作。这似乎会导致在MVC网站和WebApi中重复编写代码。我想在mvc站点中使用cookie,并在webapi中使用oauth令牌。我需要创建另一个项目(例如IdentityProvider)来管理此项任务吗?还是有一种简单的方式可以使用MVC和WebApi项目来实现此功能。谢谢!

编辑:我主要困惑于如何管理用户身份验证,因为用户可以通过MVC站点和WebApi请求进行登录。我需要以统一的方式生成UserIdentity和声明,当我必须同时处理MVC个人账户模板和WebApi2个人账户认证模板时,我感到困惑。我希望在托管在AWS的MongoDB实例中存储用户、声明等信息。


你是如何实现的?我也遇到了同样的情况,请分享一下。请查看我的问题 - Amit Kumar
我使用了IdentityServer进行实现,它是一个非常棒的开源项目。 - narciero
2个回答

2

两个模板(mvc和api)都使用SigninManager和UserManager。标准的用户管理器实现基于SQL Server和Entity Framework。

如果您想在MongoDB上维护用户数据,我认为最好的解决方案是编写自己的UserStore来实现至少IUserStore和IUserRoleStore接口,或使用this nuget包。

对于UserManager,您可以使用标准实现。

您正在使用的Asp.net身份验证是开源的,您可以在codeplex上查看它(github上的是mvc 6)。

我认为处理您的情况的最佳方式是:

对于网站登录,对于标准的Web用户,请在标准MVC控制器上执行登录操作,并让SignInManager完成工作;您可以使用模板中提供的标准Login方法。
对于API登录,请实现一个简单的OAuthAuthorizationServerProvider并覆盖GrantResourceOwnerCredentials方法;这篇文章this展示了所有步骤。
希望这可以帮到您!

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接