安全性 – 如何在客户端处理访问令牌和刷新令牌

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

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

当令牌过期时,我可以通过refresh_token创建一个新令牌.

access_token和refresh_token需要存储在客户端,因为在HTTP请求标头中设置之前,浏览器需要以明文形式提供它.

我的问题是:

问题1:存储access_token和refresh_token的推荐方法是什么,使其可供浏览器使用,因此它相对安全? (我有个人照片等敏感数据)

问题2:access_token AND refresh_token的推荐生命周期(=无法使用之前的时间)是多少? (仅供参考我在401响应后刷新令牌,我的应用程序是社交应用程序)

问题3:我是否有问题?我是否应该更改它以便根本不使用令牌的JavaScript,并使用HTTP-ONLY cookie?

谢谢 :)

杰弗里

更新:

我终于选择了HTTP-ONLY cookie.我正在使用Django Oauth Toolkit,因此Django正在等待HTTP头中的授权,而不是cookie.

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

最佳答案 我认为你在问问题3是对的.绝对使用HTTP-Only cookie,这是最安全的浏览器存储类型.

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

Cookie的实际格式可以是JWT或其他任何格式.

问题2的答案实际上取决于用户在安全性和便利性之间进行权衡的最佳位置.你最了解你的用户,所以这真的是你自己的判断.

点赞