Token 相关的高频面试题

一、基础概念题

1.什么是 Token?为什么不直接用用户名密码做身份验证?

每次请求都传密码,泄露风险大,服务器也要反复查库验证。Token 是一次验证后发放的临时凭证,减少密码暴露,降低服务器压力。

2.Cookie、Session、Token 三者的区别?

  • Cookie:浏览器存储机制,自动随请求发送,受同源策略限制
  • Session:服务端存储用户状态,通过 Cookie 里的 SessionID 关联,有状态
  • Token:客户端持有的凭证,服务端无状态,放在 Header 里传输,不依赖 Cookie

3.JWT 由哪三部分组成?各自的作用?

Header(算法声明)、Payload(数据载荷)、Signature(签名防篡改)。前两部分是 Base64 编码不是加密,Signature 用密钥生成,保证内容不被篡改。

4.JWT 的 Payload 是加密的吗?能放敏感信息吗?

不是加密,是 Base64 编码,任何人都能解码。绝对不能放密码、身份证号等敏感数据。如果需要加密载荷,要用 JWE(JSON Web Encryption)。

二、原理深入题

5.JWT 怎么保证数据没被篡改?

服务端用密钥对 Header + Payload 做签名生成 Signature。验证时重新计算签名,和 Token 里的 Signature 比对。攻击者没有密钥,改了 Payload 就对不上签名。

6.Token 存在哪里?localStorage vs Cookie 各有什么问题?

  • localStorage:方便,但容易被 XSS 攻击读取
  • Cookie(设置 HttpOnly + Secure + SameSite):JS 无法读取,防 XSS,但要处理 CSRF

推荐方案:Token 存 HttpOnly Cookie,配合 CSRF Token 双重防护。

7.Token 过期了怎么办?什么是 Refresh Token?

Access Token 设短过期时间(如 15 分钟),Refresh Token 设长过期时间(如 7 天)。Access Token 过期后,用 Refresh Token 换新的 Access Token,不需要用户重新登录。Refresh Token 只在续期时传输,减少暴露风险。

8.服务端怎么主动让一个 Token 失效?

JWT 本身是无状态的,签发后服务端无法主动撤销。常见方案:

  • Token 黑名单(Redis 存已注销的 Token,每次验证时查一下)
  • 版本号机制(数据库存用户 Token 版本,改密码时版本号+1,旧 Token 版本对不上就失效)
  • 短过期时间 + Refresh Token(缩小影响窗口)

三、场景设计题

9.分布式系统下,Session 和 Token 分别怎么处理?为什么 Token 更适合?

Session 需要所有服务器共享状态(Sticky Session 或 Redis 集中存储),架构复杂。Token 自包含用户信息,任何服务器拿到密钥都能独立验证,天然适合分布式和微服务。

10.如果 Token 被截获了怎么办?怎么防?

  • 必须用 HTTPS,防止传输层被抓包
  • 设短过期时间,减少被盗用的窗口
  • 绑定客户端指纹(IP、User-Agent),异常时拒绝
  • 关键操作(改密码、支付)要求二次验证
  • 检测到异常立即加入黑名单

11.设计一个登录系统,要求支持"记住我"和"踢人下线"功能,怎么做?

  • 记住我:登录时签发长期 Refresh Token(如 30 天),不勾选则只给短期 Token
  • 踢人下线:服务端维护用户的有效 Token 列表(Redis),踢人时删除对应记录,被踢用户下次请求验证不通过

12.单点登录(SSO)中 Token 怎么流转?

用户访问 A 系统 → 未登录,跳转到统一认证中心 → 登录成功,认证中心签发 Token → 重定向回 A 系统并带上 Token → A 系统用 Token 向认证中心验证 → 通过,用户进入 A 系统。访问 B 系统时,认证中心发现已登录,直接签发 Token 给 B。

四、高频追问

13.对称加密(HS256)和非对称加密(RS256)签名 JWT 有什么区别?什么场景用哪个?

  • HS256:签发和验证用同一个密钥,简单快速,适合单体应用
  • RS256:私钥签发,公钥验证,适合微服务(各服务只需公钥就能验证,不用共享私钥,更安全)

14.Token 无感刷新怎么实现?

前端拦截器检测到 401 响应 → 暂停其他请求 → 用 Refresh Token 调续期接口 → 拿到新 Access Token → 重放之前失败的请求。要注意并发场景下多个请求同时 401,只发一次刷新请求,其他请求排队等待。

15.OAuth 2.0 中的 Token 和 JWT 是什么关系?

OAuth 2.0 是授权框架,定义了 Token 的发放流程(授权码模式、客户端模式等),但没规定 Token 的格式。JWT 是一种 Token 格式。OAuth 2.0 的 Access Token 可以是 JWT,也可以是普通随机字符串(需要服务端查库验证)。

结尾

关于 Token 能聊的还有很多,一篇装不下。后面我会陆续补充进来,与其说这是一篇文章,不如说是一份在长大的笔记。收藏一下,隔段时间回来看看,说不定就多了你正好需要的那块。

相关推荐
Zhansiqi2 小时前
day36花卉面试题目
面试·职场和发展
Moment2 小时前
尤雨溪宣布 Vite+ 正式开源,前端工具链要大一统了
前端·javascript·面试
sunny_3 小时前
📖 2026年 大厂前端面试手写题库已开源(2.3k star)
前端·面试·github
眼眸流转3 小时前
LeetCode热题100(四)
算法·leetcode·职场和发展
深蓝轨迹4 小时前
乐观锁 vs 悲观锁 含面试模板
java·spring boot·笔记·后端·学习·mysql·面试
啊哦呃咦唔鱼4 小时前
LeetCode hot100-3 无重复字符的最长子串
算法·leetcode·职场和发展
愚者游世5 小时前
template学习大纲
开发语言·c++·程序人生·面试·visual studio
柒.梧.6 小时前
Java基础高频面试题(含详细解析+易错点,面试必看)
java·开发语言·面试
大大花猫7 小时前
求职简历的几个小建议
面试