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

相关推荐
Cosolar7 小时前
AutoGen 精通教程:从零到企业级多 Agent 系统架构师
人工智能·后端·面试
万少9 小时前
未来组织的分水岭不是员工数量,而是人才密度
前端·后端·面试
(●—●)橘子……9 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
kyriewen10 小时前
我招了一个“Prompt工程师”来写前端,结果项目差点崩了
前端·javascript·面试
bbaydnog11 小时前
嵌入式面试高频题第5弹:DMA原理、看门狗机制、低功耗模式,这3个搞不懂简历直接被筛
面试·dma·嵌入式
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
浮午13 小时前
字节AI Agent开发面试全解析:15道高频问题+深度答案
人工智能·面试·职场和发展
JustHappy13 小时前
古法编程秘籍(四):函数究竟是什么?把函数最重要的能力一次讲清楚
前端·后端·面试
Byron__13 小时前
RabbitMQ 面试核心精讲
java·面试·rabbitmq
卷帘依旧13 小时前
setState是同步的还是异步的
前端·面试