【问题标题】:AngularJS best practice application authenticationAngularJS 最佳实践应用程序身份验证
【发布时间】:2014-04-11 09:36:32
【问题描述】:

我开始构建一个 Web 应用程序,用户需要在其中进行身份验证才能访问不同的模块。

我过去一直在使用 ASP.NET MVC,使用 FormsAuthentication 和服务器会话非常容易,因此我不必为了获取用户角色或任何其他用户相关数据而往返数据库每次我访问网络方法时。

我一直在阅读的内容,AngularJS 不会那样工作,所以不会有任何服务器会话等。所以...

  1. 如果每次访问 Web 方法时都需要验证用户身份,我是否需要使用数据库,或者有什么好的做法可以学习?

  2. 我知道有一些方法可以在客户端存储状态数据,但这会如何影响 Web 应用程序的性能?

  3. 我已经看到,当用户登录到应用程序时,最好的方法是向客户端发送令牌,然后强制 AngularJS 在每次访问 Web 方法时发送该令牌......但是发送到客户端用户 sessionId(来自数据库),然后在每个 Web 方法使用发送它,然后创建一个过滤器,您可以在其中检查 sessionId 是否存在于数据库中,以便验证用户身份?

感谢任何意见或建议。

谢谢。

【问题讨论】:

  • 这更多是关于如何保护 REST API(服务器端资产)的问题。 Angular 不会阻止您使用 cookie 和会话进行身份验证。
  • Angular 在身份验证方面是不可知的,您可以使用您习惯使用的相同方法。

标签: angularjs asp.net-mvc-4 asp.net-web-api


【解决方案1】:

我对身份验证的看法是,在用户通过身份验证之前,您不需要将 AngularJS 引入图片。您使用简单的登录页面并对用户进行身份验证,然后将他重定向到具有 Angularjs 的应用程序页面。查看我的旧答案以获取更多详细信息How to handle authentication in Angular JS application

让我试着解决您的疑虑。

如果我每次访问网络时都需要验证用户身份 方法我需要使用数据库还是有什么好的做法 我能学到什么?

一旦您通过身份验证,服务器和浏览器 cookie 会处理该部分,您无需执行任何操作。标准 MVC 网站的工作原理。

我知道有一些方法可以在客户端存储状态数据,但如何做到 会影响 Web 应用程序的性能吗?

由于 AngularJS 是一个 SPA,所以没有页面刷新。存储在$rootScope 或使用服务的数据一直存在,直到刷新页面。由于涉及的往返次数较少,因此性能会更好。

我已经看到,当用户登录到应用程序时,最好的方法是 向客户端发送令牌,然后强制 AngularJS 发送该令牌 每次访问网络方法时的令牌......但是发送到 客户端用户 sessionId(来自数据库),然后在每个网络上 方法消耗发送,然后创建一个过滤器,你 检查 sessionId 是否存在于数据库中,以便用户识别 验证了吗?

这是标准表单身份验证,对开发人员透明,任何需要在传统 MVC 应用程序中完成的身份验证都可以在这里工作。您不必担心 sessionid、令牌等。要在客户端获取用户身份,您可以使用 getUser 等方法编写一个 angularjs 服务来获取当前登录的用户。但我警告您,授权相关的决定仍应在服务器上完成。

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 2013-01-17
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 2014-05-14
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多