在现有的mvc项目中使用基于令牌的身份验证

时间:2014-08-30 10:02:36

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-web-api asp.net-web-api2

现有的mvc 3应用程序正在使用asp.net成员身份验证(System.Web.Security.MembershipProvider的子类)。此应用程序仅使用Web浏览器访问。

现在,应用程序需要支持移动应用程序,我已经在项目中引入了WebApi 2控制器来处理移动应用程序请求。

问题是我没有清楚地想过如何验证移动应用程序用户。

似乎我必须提供令牌类型的身份验证机制,其中移动应用必须提交每个请求的令牌(在身份验证后发布)。但我不确定如何实现它(比如要使用的框架/包),并使其与现有的 MembershipProvider

并行工作

那么,我如何提供一种验证Web Api请求的方法,并保留现有的用于MVC Controller请求的asp.net MembershipProvider。

另外,如果可以通过其他方式做得更好吗?

1 个答案:

答案 0 :(得分:2)

它不一定是"令牌"验证移动用户。

用于验证webapi请求的令牌的概念受到了很多关注,因为DotnetOpenAuth和OWIN已经采用了.NET世界的OAuth2协议。 OAuth2支持多个"流"而有趣的是旁边"被动"流(浏览器重定向到外部登录页面)还有"活动"流(专为移动应用等活跃客户设计)。

因此,切换到OAuth2意味着您正在使用支持所有主要方案的一致认证协议。

对您而言(您似乎感兴趣)的一种可能方法是采用令牌方法来验证webapi请求。这是可能的,但这意味着您可以并排使用两种不同的身份验证方法,即针对被动客户端的基于cookie的表单身份验证和针对活动客户端的基于令牌的身份验证。

我会说这种气味。

我宁愿考虑采用统一的方法。

完全转向OAuth2,这意味着您为被动和活动客户端采用DotnetOpenAuth / OWIN。

或者您坚持使用表单身份验证,并为您的活动客户端启用它。

后者相当简单。您的活动客户端不携带令牌,而是携带表单身份验证cookie。要发布此类cookie,您只需公开一个匿名的webapi方法,该方法需要登录名和密码,并将表单cookie附加到响应中。

假设您的客户支持cookie,服务器发布的表单cookie将用于连续请求,您所要做的就是通过Web api方法获得Authorize属性。表单模块将获取cookie并在请求的生命周期中填充IPrincipal,就像它对常规请求一样。

总结:

转向基于令牌的身份验证:

优点:

  • 将来您可以轻松处理更复杂的身份验证方案(例如使用外部身份验证提供程序)
  • 现在通常使用基于令牌的OAuth2,因此您可以更轻松地与其他应用程序集成

缺点:

  • 迁移可能会花费:您首先必须获得知识,做一些R& D然后迁移

坚持使用表单身份验证:

优点:

  • 您已拥有它,而您只为活跃客户启用它

缺点:

  • 表单身份验证不是真正的身份验证协议"。这意味着没有明显的方法可以轻松地与外部身份验证提供程序/使用者集成