我正在使用AngularJS客户端创建一个网站,并在REST中与后端(在另一个域中)进行通信。
要对每个呼叫进行身份验证,我会通过每个HTTPS呼叫的标头传递一个令牌:“授权:承载者access_tokenXXXXXX”
当令牌过期时,我可以通过refresh_token创建一个新的。
access_token和refresh_token需要存储在客户端,因为浏览器需要在将其设置为HTTP请求标头之前以明文形式提供。
我的问题是:
问题1 :存储access_token和refresh_token的推荐方法是什么,以使其可供浏览器使用,因此它相对安全? (我有像个人照片这样的敏感数据)
问题2 :access_token AND refresh_token的推荐生命周期(=无法使用的时间)是多少? (仅供参考我在401响应后刷新令牌,我的应用程序是社交应用程序)
问题3 :我有问题吗?我是否应该更改它以便根本不使用令牌,并使用HTTP-ONLY cookie?
谢谢:)
杰弗里
更新:
我终于选择了HTTP-ONLY cookie。我正在使用Django Oauth Toolkit,因此Django正在等待HTTP头中的授权,而不是cookie。
要解决这个问题,我使用的是一个收集cookie标记的中间件,并将其设置在标题中。它还应该允许我在access_token到期之前重新验证用户(使用刷新令牌)。
答案 0 :(得分:3)
我认为您在问问题3时是对的。绝对使用仅限HTTP的Cookie,这是最安全的浏览器存储类型。
如smwikipedia提供的链接所述,使用HTTP-Only cookie有助于防御XSS。为了抵御CSRF,您应该查看this AngularJS机制。
Cookie的实际格式可以是JWT或其他任何内容。
问题2的答案实际上取决于您的用户'在安全性和便利性之间进行权衡的最佳点。你最了解你的用户,所以它真的是你自己的判断。
答案 1 :(得分:0)