栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JWT应该保存在哪里?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JWT应该保存在哪里?

最近几年的项目我都用JWT作为身份验证令牌。我一直有一个疑问:服务端发放给浏览器的JWT到底应该存储在哪里?这里只讨论浏览器的场景,在这个场景里有三种选择。

cookie

服务端可以将JWT令牌通过cookie发给浏览器,浏览器在请求服务端接口时会自动在cookie头中带上JWT令牌,服务端对cookie头中的JWT令牌进行检验即可实现身份验证。但它容易受到CSRF攻击的影响。

解决的方法是通过设置cookie的SameSite属性为Strict。跨站时不会发送 cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 cookie。

cookie除了易受CSRF攻击还有XSS攻击。黑客可以通过JS脚本读取cookie中的信息。为了防止这一点,可以设置cookie的属性为HttpOnly。

response.setHeader("Set-cookie", "jwt=jwt_value;Path=/;Domain=domainvalue;Max-Age=seconds;HttpOnly");

你可以通过设置Max-Age来设置其生存时间。

localStorage

localStorage也可以存储JWT令牌,这种方法不易受到 CSRF 的影响。但是和cookie不同的是它不会自动在请求中携带令牌,需要通过代码来实现。不过这样会受到XSS攻击。另外如果用户不主动清除JWT令牌,它将永远存储到localStorage。

sessionStorage

sessionStorage大部分特性类似localStorage,不过它的生命周期不同于localStorage,它是会话级存储。关闭页面或浏览器后会被清除。

总结

您可能会注意到所有 3 种方法都有相同的缺点——“易受 XSS 攻击”。请特别注意 XSS的防护,并始终遵循XSS保护的最佳实践。

结论

三种形式都容易收到XSS攻击,因此如果对安全性要求很高,要特别针对性的配置。在三种方式之中,cookie 提供了一堆安全选项,例如SameSite、HttpOnly等。因此最好使用 cookie。

从Java 9 到 Java 17之Java 11

2021-09-29

从Java 9 到 Java 17之Java 10

2021-09-27

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/318350.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号