如何处理客户端

时间:2015-12-16 14:28:07

标签: security browser access-token restful-authentication

我正在使用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到期之前重新验证用户(使用刷新令牌)。

2 个答案:

答案 0 :(得分:3)

我认为您在问问题3时是对的。绝对使用仅限HTTP的Cookie,这是最安全的浏览器存储类型。

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

Cookie的实际格式可以是JWT或其他任何内容。

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

答案 1 :(得分:0)

我面临着与你类似的问题。

我正在为browser-basednon-browser客户开发服务层。我计划使用JWT(JSON Web Token)对两者进行身份验证。

评论时间太长,所以我将其作为答案发布。

对于问题1,根据here,出于安全考虑,他们建议将JWT令牌存储在cookie中。

对于问题2,here是关于JWT到期处理的线索。

对于问题3,我还没有评论。