1

存在一个使用asp.net成员身份验证(System.Web.Security.MembershipProvider的子类)的现有mvc 3应用程序。此应用程序只能使用网络浏览器访问。在已存在的mvc项目中使用基于令牌的身份验证

现在,应用程序需要支持移动应用程序,并且我已经将WebApi 2控制器引入到用于处理移动应用程序请求的项目中。

问题是我没有清楚如何对移动应用程序用户进行身份验证。

看来,我必须提供令牌类型认证机构,其中移动应用已经提交令牌(验证后发布)每个请求。但我不知道如何实现它(如使用什么框架/包),并让它与现有的并行工作MembershipProvider

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

另外,如果这可以在其他方面做得更好?

回答

2

它不必是验证移动用户的“令牌”。

用于验证webapi请求的令牌概念受到了DotnetOpenAuth和OWIN已被.NET世界采用的OAuth2协议的很大关注。 OAuth2支持多个“流”,有趣的是除了“被动”流(浏览器重定向到外部登录页面)之外,还有“活动”流(专为活动客户端设计,如移动应用程序)。

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

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

我会说这种气味。

我宁愿想一个统一的方法。

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

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

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

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

总结:

向基于令牌的认证移动:

优点:

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

缺点:

  • 迁移成本可能:首先必须获得的知识,做一些[R & d,然后再迁移

与窗体身份验证坚持:

优点:

  • 你已经拥有了它,你只要启用它活跃客户

缺点:

  • 窗体身份验证是不是真正的“身份验证协议”。这意味着没有明显的方式可以轻松整合外部身份验证提供商/消费者
+0

我认为cookie方法看起来不错。如果我在正确理解了你之后,在通过Login Url验证了用户之后,我只需从响应中获取“.ASPXAUTH”cookie并将它发送回下一个请求。听起来简单而实用。 – Jatin 2014-08-30 11:20:20

+0

从技术上讲,你抓住cookie并将其发送回去。在实践中,如果客户端的代理支持cookie,则不需要执行任何操作,应该选取cookie并自动附加到连续的请求中。 – 2014-08-30 11:41:56

+0

请记住只是**在发出呼叫您的登录请求时发出一个新的cookie,而不是您称之为“抢”一个,因为此时没有cookie来“抓取”。发出一个cookie意味着你通过创建一个'FormsAuthenticationTicket'来创建一个,你加密这个票据('FormsAuthentication.Encrypt')并且把这个cookie附加到响应中('Response.AppendCookie')。 – 2014-08-30 17:12:59

相关问题