单页应用程序:身份验证令牌管理和浏览器刷新

时间:2014-01-19 15:43:14

标签: javascript api angularjs browser single-page-application

在处理Angular应用程序时,我有一个单页应用程序,它与JSON Web服务进行通信以获取数据。

我的Angular应用程序中的“登录”实际上只是为令牌交换用户名/密码。该令牌作为所有后续请求的标头传递,因此服务器可以对其进行授权。这很好用,直到用户刷新浏览器窗口当然(通过刷新或离开“页面”并返回)。

显然,一个选项是让用户再次输入他们的用户名/密码,但这似乎是没有任何用户的好方法。

我可以想到4个选项:

  1. 将令牌存储在安全会话cookie中。 (我现在在做什么。我只是在使用,所以客户端可以阅读。在服务器上没有使用或想要。)
  2. 使用某种本地存储来存储令牌。 (将是不安全的 需要手动过期维护。)
  3. 阻止用户使用“onbeforeunload”刷新浏览器 码。 (当我得到“你确定要离开时我不喜欢 这个页面“消息,我认为其他人也有同感。”
  4. 包含令牌作为网址的一部分。 (可能会使网址看起来大而且凌乱。可能存在物理安全风险。可能需要额外处理书签和过期令牌。)
  5. 选项1是此功能的最佳选择吗?还有什么比这些更好的事情吗?

1 个答案:

答案 0 :(得分:2)

我认为选项1是最适合您用例的选项。所有主要的Web框架都支持此选项。

如果您需要手动处理此操作,您需要确保以下步骤:

  • Web服务将通过创建和设置安全身份验证cookie来处理初始身份验证请求。 auth cookie应该是基于时间的(仅在特定时间间隔内有效),如果可能,其值应该是唯一值;
  • 在初始身份验证请求之后,所有后续请求将自动传递带有请求标头的身份验证Cookie - 这由浏览器处理。
  • Web服务需要通过验证cookie值来处理后续请求中基于cookie的身份验证,并在cookie过期时返回错误。
  • 您需要确保客户端全局身份验证处理程序捕获任何身份验证异常并向用户显示友好消息。