使用控制器的单页应用 - 如何使用 ASP.NET 标识进行保护



我有一个单页应用程序,它使用标准控制器(不是ApiController)来检索所有HTML视图,这是通过ajax完成的。 但是,WebApi 使用 breezejs 用于客户端与后端数据库通信。我正在实施 ASP.NET 身份安全性 - 我应该使用 MVC cookie 身份验证还是持有者令牌?我需要解决方案来说明单独的登录页面,并且需要一个干净的服务器端重定向。

免责声明

这是一个相对微不足道的问题,因为它非常具体,通过了解 Web API 和 MVC 控制器之间的身份验证差异,这应该相当简单。

假设

  1. Web API 项目具有自己的身份验证,并且不会与 MVC 项目通信以获取会话用户或任何内容
  2. 您的 ASP.NET MVC 控制器位于使用窗体身份验证并将用户存储在会话 Cookie 中的项目中。
  3. 当我在下面引用 MVC 时,您理解这些引用 ASP.NET MVC

建议

我要做的是让您的 MVC 项目使用 OAuth 进行身份验证,并将用户存储在您可以设置和获取的会话中的 cookie 中。 然后,可以使用 Authorization 属性修饰为视图提供服务的控制器操作。 当用户尝试访问不允许访问的视图时,这会将用户重定向到登录页面(只要在您的 web.config 中设置了该视图)

对于 Web API 项目,您不能依赖会话,因为听起来您正在分离这两个项目。 这是我的建议——

在 MVC 项目中成功对用户进行身份验证后,向 Web API 发出打开登录方法的请求。 这将执行一些逻辑测试,然后使用某种会话令牌将用户存储在数据库中,或者自动将用户写入数据库。

现在,存储在 MVC 项目的会话中的用户可以将其传递给客户端,并将其附加到对 Web API 的 Breeze 调用,并将其用于身份验证。 您将需要显式设置该令牌的持续时间等等,但是将其附加到Breeze.js这样的调用非常容易 -

 var query = breeze.EntityQuery.from('myService').withParameters({'tokenId': thisTokenId});

现在,您的查询将使用可用于身份验证的 tokenId 参数命中 API。

编辑

如果要将 ASP.NET MVC项目设置为使用OAuth,可以点击此链接 -

http://www.asp.net/mvc/tutorials/security/using-oauth-providers-with-mvc

请记住,基于表单的身份验证仅意味着(简而言之)您将为用户提供某种使用某种表单登录的方式。

最新更新