如何在客户端处理访问令牌和刷新令牌

Geo*_*y D 5 browser security restful-authentication access-token

我正在使用AngularJS客户端创建一个网站,并在REST中与后端(在另一个域中)进行通信。

为了验证每个调用,我通过每个HTTPS调用的标头传递一个令牌:“授权:承载access_tokenXXXXXX”

当令牌过期时,由于refresh_token,我能够创建一个新令牌。

access_token和refresh_token需要存储在客户端,因为浏览器需要在HTTP请求标头中将其设置为明文形式。

我的问题是:

问题1:建议使用哪种方式存储access_token和refresh_token以使其对浏览器可用,从而使其相对安全?(我有安静的敏感数据,例如个人照片)

问题2:access_token和refresh_token的建议生存期(=无法使用之前的时间)是多少?(仅供参考,我会在401响应后刷新令牌,并且我的应用是社交应用)

问题3:我有建筑方面的问题吗?我是否应该更改它以便根本不使用JavaScript并使用仅HTTP的cookie?

谢谢 :)

杰弗里

更新:

我最终选择了仅HTTP cookie。我正在使用Django Oauth Toolkit,因此Django正在等待HTTP标头(而不是Cookie)中的授权。

为了解决这个问题,我正在使用一个中间件,该中间件收集cookie的令牌并将其设置在标题中。它还应该允许我在access_token过期之前重新验证用户身份(使用刷新令牌)。

小智 4

我认为你问问题 3 是正确的。绝对使用 HTTP-Only cookie,这是最安全的浏览器存储类型。

正如 smwikipedia 提供的链接中所述,使用 HTTP-Only cookie 有助于防御 XSS。为了防御 CSRF,你应该查看这个AngularJS 机制。

cookie 的实际格式可以是 JWT 或其他任何格式。

问题 2 的答案实际上取决于用户在严格的安全性和便利性之间进行权衡的最佳点。您最了解您的用户,因此这实际上是您自己的判断。