我正在使用前端Reactjs和后端SpringBoot(REST)创建一个应用程序 .
我想使用JWT令牌来保证安全 . 由于窃取JWT刷新令牌的安全问题可能意味着,我想问你以下场景是否有效:
-
后端
-
登录时创建access-JWT和refresh-JWT
在有效负载部分的 -
中设置相同的唯一UUID(因此我在它们之间创建"link") .
-
在DB中保存refresh-JWT的hashCode(用于将来的有效性检查)
-
在body access-JWT和cookie refresh-JWT中作为响应返回 .
-
前端
-
在本地存储中存储访问权限-JWT
-
将refresh-JWT存储为cookie
现在,在每个来自前端的请求中,我将对两个令牌(access-JWT in header和refresh-JWT as cookies)进行处理 . 如果它们具有相同的唯一UUID,我会检查它们 . 如果他们这样做,我将继续他们的验证过程 .
这样做我正在努力消除XSS和CSRF攻击,假设那些不会同时完成 . 因此,如果访问-JWT被盗,攻击者将无法刷新-JWT,反之亦然 .
请分享你的想法 . 谢谢 .
1 回答
您应该避免发明自己的身份验证/会话管理方案,因为微小的细节可能会破坏整个系统的安全性 .
引自Auth0的Which OAuth 2.0 flow should I use?
我建议使用标准的OpenID Connect(或OAuth 2.0)流程 - 在您的情况下 implicit flow .