在浏览器中存储令牌
Posted
技术标签:
【中文标题】在浏览器中存储令牌【英文标题】:Storing Tokens in the browser 【发布时间】:2017-10-19 23:39:13 【问题描述】:问题 =]
根据我的研究,为了防止 CSRF 攻击,似乎将 Web 令牌存储在本地存储中是比使用 cookie 更好的方法(我知道本地存储容易受到 XSS 攻击这些似乎比 CSRF 更容易预防)。话虽如此,我一直无法找到任何 relavant 指南来说明如何利用 本地存储... 我正在寻求一些帮助以了解以下内容的工作原理......-
首选方法/工作流程将服务器签名的令牌传递到浏览器的本地存储。
浏览器存储令牌后,我该如何使用存储的令牌。
是否需要停止默认通过 JS 提交表单等内容,然后在每个请求中发送带有
authorization: Bearer <token>
标头的 AJAX 请求?
当用户单击指向该用户拥有的资源的链接时,如何将该令牌发送到服务器以授予对受保护资源的访问权限?
工具
前端 html5(从 Handlebars 编译) JS CSS(从 SASS 编译) 后端 nodeJS(使用 Express)注意:我希望将来用代码示例编辑这篇文章(一旦我掌握了它,哈哈),以帮助将来像我这样困惑的人
【问题讨论】:
【参考方案1】:首选方法是从 /users/login 请求(无论您喜欢什么,标头或正文)返回带有成功响应的令牌。然后你把它放到本地存储中。
这里最重要的是,没有 HTTPS 就无法使用 JWT。否则,您最终将传递不受保护的凭据。
获取令牌后,您应该手动将其作为标头添加到每个请求中。使用一些 js ajax 包装器来简化这个任务。
据我所知,没有办法发送带有<a href="">
元素的自定义标头。所以我最终传递了额外的令牌(一些哈希,不是 JWT)以及链接<a href="/some_protectded_page?token=...">
。但这不是最优的。如果你在服务器端渲染页面,最好使用会话。
【讨论】:
我更喜欢无状态路由....同时保持无状态认证的优势?以上是关于在浏览器中存储令牌的主要内容,如果未能解决你的问题,请参考以下文章
在基于浏览器的应用程序中,我在哪里存储 OAuth 刷新令牌
无法在浏览器的 cookie 中存储 json Web 令牌
如何使用AngularJS将身份验证承载令牌存储在浏览器cookie中