SPA中令牌存储和刷新的选项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SPA中令牌存储和刷新的选项相关的知识,希望对你有一定的参考价值。
[我一直在阅读Aaron Parecki的基于浏览器的应用程序草案(意为SPA,例如使用React或Angular开发的SPA),使用OAuth 2以及OWASP安全准则进行身份验证最佳实践,这让我感到非常困惑:
- RFC的草案提到了旋转刷新令牌。现在在坚持REST的无状态约束的同时我该怎么做?是否在cookie和刷新令牌中也包含随机字符串的摘要,并检查它们是否相等?
- 在浏览器中存储刷新令牌的正确方法(或更确切地说是一些更安全的方法是什么?我已经检查了okta的JS身份验证库,默认情况下它使用
localStorage
,这是OWASP指南推荐的。它有某种额外的保护吗?我应该在其中添加一些摘要,然后也将其放入Cookie中并与之匹配吗? - OWASP建议会话ID对于客户端应该完全不透明,但是如果我们使用JWT,它是否违反了这一原则?这是否意味着我应该始终使用对称密码来加密我的JWT?
一些参考:
- https://tools.ietf.org/html/draft-ietf-oauth-browser-based-apps-04#section-4
- https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/HTML5_Security_Cheat_Sheet.md
- https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/JSON_Web_Token_Cheat_Sheet_for_Java.md
- https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Session_Management_Cheat_Sheet.md
答案
SPA的标准选项是使用iframes to silently renew tokens,而根本不使用刷新令牌。另一答案
在上一个答案中,您提到“首先考虑了同源部署”。我为您提供了完美的solution(SuperTokens),它实现了旋转刷新令牌,并且是一个完整的解决方案。即,它负责cookie的前端管理以及后端和数据库层。一点点细节:以上是关于SPA中令牌存储和刷新的选项的主要内容,如果未能解决你的问题,请参考以下文章