Token:解决 Cookie+Session 痛点的新一代「身份凭证」
一、为什么会出现 Token1. Cookie Session 的天生痛点服务器压力大Session 存在服务器内存 / Redis用户越多占用越大。分布式集群麻烦必须做 Session 共享Redis 同步、IP 绑定等。跨域 / 跨端不友好Cookie 受同源策略限制APP、小程序、第三方跨域场景难用。安全风险自动携带 Cookie易受 CSRF 攻击。2. Token 要解决的核心问题服务器无状态不存用户会话信息天然支持分布式 / 跨域更安全、更灵活适合Web、APP、小程序、微服务、第三方授权二、Token 基本概念1. 什么是 TokenToken 令牌 / 凭证是服务器生成的一串加密字符串代表用户身份和权限。客户端自己保存每次请求主动带上服务器验证后即可识别身份。2. 核心特点无状态Stateless服务器不存任何 Session信息全部存在 Token 里。跨端友好不依赖 Cookie可放在 Header、Param 等任意位置。自包含Token 里可直接存用户 ID、权限、过期时间等。可加密签名防止篡改、伪造。三、Token 完整登录流程经典用户登录客户端提交用户名 密码服务器验证验证通过后生成 Token包含用户信息 签名返回 Token服务器把 Token 发给客户端客户端保存存在localStorage / sessionStorageCookie手动设置不依赖自动携带APP 本地存储后续请求客户端主动在请求头带上plaintextAuthorization: Bearer token服务器验证解析 Token → 验签名 → 查过期 → 拿到用户信息不需要查 Session/Redis基础 JWT 场景四、Token 主流实现JWT1. JWT JSON Web Token目前最标准、最常用的 Token 格式。2. JWT 结构三段式用.分隔plaintextHeader.Payload.Signature① Header头声明算法 类型示例json{ alg: HS256, typ: JWT }② Payload负载存放实际数据用户信息、过期时间等官方标准字段推荐iss签发者sub用户 IDexp过期时间iat签发时间注意Payload 只是 Base64 编码不是加密不要存密码等敏感信息。③ Signature签名保证 Token不被篡改公式plaintextSignature HMACSHA256( Base64(Header) . Base64(Payload), 服务器密钥 )只要密钥不泄露别人就无法伪造 Token。五、Token 与 Cookie/Session 核心对比面试必背表格维度Cookie SessionTokenJWT存储位置Session 存服务器信息存在客户端自身状态有状态无状态分布式支持需要共享方案Redis 等天然支持跨域 / 跨端弱受同源策略限制强支持 Web/APP/ 小程序 / 微服务性能服务器查表量大有压力直接验签无 IO性能更好CSRF 风险高自动带 Cookie低需主动携带可控制安全性依赖 Cookie 配置签名防篡改可加密失效控制服务器可直接删 Session无法主动作废只能等过期可用黑名单六、Token 的优点无状态减轻服务器存储压力天然支持水平扩展适合微服务、集群跨域跨端友好不依赖 Cookie防 CSRF不自动发送可控制来源可自包含权限适合第三方授权OAuth2七、Token 的缺点与解决方案1. 无法主动作废最大痛点Token 一旦签发只能等到期。解决方案Redis 黑名单作废的 Token 存入 Redis请求时先校验短有效期 刷新 TokenRefresh Token2. 长度比 SessionId 大每次请求携带数据稍多可忽略。3. Payload 可被解码不要存密码、手机号明文等敏感信息。八、Token 携带方式实战推荐请求头 AuthorizationplaintextAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...放在 URL 参数不推荐放在 POST 参数放在自定义 Header如token: xxx九、双 Token 方案企业级常用为了解决安全和体验平衡Access Token有效期短5~30 分钟用于正常接口请求Refresh Token有效期长几天几周仅用于刷新 Access Token泄露风险相对可控流程登录 → 返回 AT RTAT 过期 → 用 RT 换新 ATRT 过期 → 重新登录十、安全最佳实践必须用 HTTPS防止 Token 被抓包窃取。签名密钥严格保密密钥泄露 所有人可伪造 Token。设置合理过期时间避免长期有效。敏感信息不放入 Payload只放用户 ID、角色不放密码。开启 Redis 黑名单支持强制下线、改密后作废旧 Token。避免存在 localStorage 被 XSS 窃取可存在HttpOnly Cookie里仍用 JWT 逻辑只是借用存储。十一、高频面试题极简答案Token 解决了 Session 什么问题无状态、天然分布式、跨端友好、降低服务器压力、防 CSRF。JWT 由哪三部分组成Header、Payload、Signature。JWT 能存密码吗不能Payload 只是 Base64 编码可解码。Token 怎么防止篡改通过签名Signature服务端验签即可判断是否被修改。Token 如何实现主动退出使用 Redis 黑名单将 Token 加入黑名单即作废。Token 比 Session 更安全吗在防 CSRF、防劫持可控性上更安全但 XSS 风险需要自己防护。十二、全文总结CookieSession有状态、服务器存储、集群麻烦、适合传统 Web。TokenJWT无状态、自包含、天然分布式、跨端神器。核心思想把 “身份凭证” 交给客户端自己保管服务器只负责验签不负责存储。现代架构前后端分离、APP、小程序、微服务 →首选 Token。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2445533.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!