提问人:asallan3 提问时间:2/1/2023 最后编辑:Pavel Gatilovasallan3 更新时间:7/5/2023 访问量:240
将访问令牌和刷新令牌保存到本地存储但已加密?
Saving access token and refresh token to local storage but encrypted?
问:
我一直在研究使用 ReactJS 进行前端开发,并使用 ASP.NET Core 进行后端开发,作为第一步,我一直在开发身份验证/授权(登录)系统。
我实现了在 1 小时后过期的访问令牌和在 7 天后过期的刷新令牌,或者在请求新的访问令牌时(以换取旧的访问令牌和有效的刷新令牌)。
我试图听从人们的建议并使用 cookie 作为刷新令牌,但我一直在为此苦苦挣扎,我的 API 只会从 cookie 中获得相同(旧的/过期的)刷新令牌......因此,我决定在刷新访问令牌时将刷新令牌和访问令牌作为 json 发送。HttpOnly
在前端,我使用包将两个令牌保存在 Cookie(非 HttpOnly)上,但在保存之前我使用 AES 256 位对它们进行加密。我被告知 Cookie(非 HttpOnly)容易受到 XXS 攻击,但我想知道我的令牌有多脆弱,因为我使用美国联邦信息处理标准使用私钥加密它们?js-cookie
localStorage
答:
0赞
Pavel Gatilov
7/5/2023
#1
正如 juraj-martinika 所暗示的那样,使用客户端存储密钥的客户端加密无法使任何事情变得更加安全。在应用程序级别,任何加密的挑战都不是加密过程,而是密钥管理过程。您的加密数据与密钥存储一样安全。如果您将密钥存储在 JS 文件、JS 变量或本地/会话存储中的常量中 - 获取加密数据就像根本没有加密一样容易。
关于可用于实现安全令牌管理的模式,有一个很好的主题:在客户端上存储刷新令牌的什么位置?看看什么可以对您的情况有所帮助。
如果您可以使用 cookie - 我会恢复到它们,但可以解决过时的问题。
评论
0赞
Pavel Gatilov
7/5/2023
题外话,但对于 cookie - 您可能在刷新时错过了 cookie 更新。确保当访问令牌过期并颁发新令牌时,后端会发送另一组 Set-Cookie 标头,以便在浏览器中更新 Cookie。
评论