在 Web 场景里,最常见的几种**JWT(JSON Web Token)**存储方式主要有:
下面从安全性、跨域便利性、实现复杂度等方面做一个详细对比,帮助你根据业务场景做出选择。
Set-Cookie
响应头把 Token 设置到浏览器 Cookie 中,并加上HttpOnly
、Secure
、SameSite
等安全属性。SameSite
、CSRF Token 等策略提升对 CSRF 攻击的防御能力。Access-Control-Allow-Credentials
等,且 Cookie 的SameSite
可能需要设为None
并配合Secure
。HttpOnly
属性,所以前端脚本(JS)可以读取和写入 Token。window.localStorage
中。localStorage
中拿 Token,加到Authorization: Bearer <token>
请求头里。localStorage
内容,将 Token 盗走。Authorization
头可以避免自动携带 Cookie 的情况,但如果你有其他需求(比如还在用 Cookie 维护部分状态)仍有可能受 CSRF 影响。Authorization
头。方式 | 安全性(防XSS) | 防CSRF | 跨域/多域配置 | 易用性/集成难度 | 生命周期管理 |
---|---|---|---|---|---|
Cookie(HttpOnly) | 较高(HttpOnly) | 需要配合 CSRF 方案 | 需要 CORS + SameSite 配置 | 易用(自动发送),但配置跨域略复杂 | 由服务端/Cookie 属性控制 |
普通 Cookie | 较低(可读写) | 同上,需CSRF防范 | 同上 | 简单,但易泄露 | 同上 |
localStorage | 较低 | 通常不自动发起CSRF,但仍需整体防范 | 较灵活 | 实现需要前端手动传 Token | 前端自行控制,需刷新策略 |
sessionStorage | 同 localStorage | 同 localStorage | 同 localStorage | 同 localStorage | 关闭Tab即失效 |
内存变量(in-memory) | 低(可读写) | 无Cookie自动发送 | 最灵活 | 需自行实现刷新逻辑 | 刷新或关闭页面即失效 |
注:
Authorization: Bearer <token>
头,后端只需在每次请求解析该头即可。Authorization
头,但要确保站点足够安全,尤其防范 XSS。希望以上对比能帮助你更好地理解和选择合适的 Token 存储方式。若应用对安全要求很高,优先考虑 HttpOnly Cookie 方案;若需要同时支持多域名访问或移动端/第三方,则要结合 Token + localStorage/内存,并实施严格的前端安全策略。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。