asp.net-mvc - 使用 Controller 的单页应用程序 - 如何使用 ASP.NET Identity 保证安全?

标签 asp.net-mvc breeze single-page-application asp.net-identity

我有一个单页应用程序,它使用标准 Controller (不是 ApiController)来检索所有 HTML View ,这是通过 ajax 完成的。然而,WebApi是使用breezejs来让客户端与后端数据库进行对话的。我正在实现 ASP.NET 身份安全 - 我应该使用 MVC cookie 身份验证还是不记名 token ?我需要解决方案来说明单独的登录页面,并且需要一个干净的服务器端重定向。

最佳答案

免责声明

这是一个相对简单的问题,因为它非常具体,并且通过了解 Web API 和 MVC Controller 之间身份验证的差异,这应该是相当简单的。

假设

  1. 您的 Web API 项目有自己的身份验证,不会与 MVC 项目通信来获取 session 用户或任何内容
  2. 您的 ASP.NET MVC Controller 位于使用表单例份验证并将用户存储在 session cookie 中的项目中。
  3. 当我在下面引用 MVC 时,您会明白这些是在引用 ASP.NET MVC

推荐

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

对于 Web API 项目,您不能依赖 Session,因为听起来您正在将两个项目解耦。这是我的建议 -

当您的用户在 MVC 项目中成功通过身份验证后,向 Web API 发出开放登录方法的请求。这将进行一些逻辑测试,然后使用某种 session token 将用户存储在数据库中,或者自动将用户写入数据库。

现在,您的用户存储在 MVC 项目的 session 中,您可以将其传递给客户端,并将其附加到对 Web API 的 Breeze 调用中,并使用它进行身份验证。您需要明确设置该 token 的持续时间等,但将其附加到 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

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

关于asp.net-mvc - 使用 Controller 的单页应用程序 - 如何使用 ASP.NET Identity 保证安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869701/

相关文章:

asp.net-mvc - 为什么 log4net 不记录 nhibernate 信息

css - 在整个屏幕上拉伸(stretch) MVC Web 应用程序

c# - 使用自定义表的成员身份和角色身份验证

asp.net-mvc - Web部署由于使用文件而失败

save - 使用breeze.js我只想发送非缓存实体的更新属性

Laravel 护照 : Manually create access token

javascript - Webpack:将 Web 组件预呈现为 HTML 片段?

breeze - 使用自定义 EFContextProvider 进行服务器端验证

javascript - 在 BreezeJS 中按列过滤到列总和或运算符

angularjs - 单页应用程序应该如何提供永久链接?