OAuth2 与 JWT

共 19 题
#

1. JWT 与 Session 的取舍

A JWT 一旦签发,服务端可以随时吊销而无需额外机制
B JWT 是会话状态必须存储在服务端与 Session 完全相同
C Session 无法在分布式系统中使用
D JWT 无状态、便于微服务独立验签,但难以主动撤销;Session 有状态、可撤销,但需共享存储 ✓ 正确答案
#

2. JWT 在 OAuth2 客户端凭证模式的应用

A 该模式需要用户授权页面确认
B 该模式用于服务间通信,客户端用 client_id/client_secret 换取 JWT 访问令牌,无需用户参与 ✓ 正确答案
C 客户端凭证模式下 JWT 不需要设置 aud 与 scope
D client_secret 可以安全地放在前端代码中使用
#

3. JWT 在 Refresh Token 轮换中的边界

A 轮换机制在每次刷新时签发新 Refresh Token 并废弃旧的,可缓解令牌重放风险 ✓ 正确答案
B 访问令牌 TTL 越长越安全,无需 Refresh Token
C Refresh Token 生命周期短,且无需服务端跟踪
D Refresh Token 可以安全地存放在浏览器 LocalStorage 中
#

4. JWT 在 Spring Cloud Gateway 的转发

A 网关统一校验 JWT 后向服务注入用户信息,且须剥离客户端伪造的同名头以维护信任边界 ✓ 正确答案
B 网关只能转发原始 JWT,不能解析任何声明
C 网关校验 JWT 后无需考虑白名单路径
D 下游服务无需信任网关,可自行校验网关注入的头
#

5. JWT 在 spring-security-oauth2-jose 的边界

A 它不支持从 JWKS 端点加载公钥,只能硬编码密钥
B 它内置完整的授权服务器,可直接签发访问令牌
C 它提供 JwtDecoder/JwtEncoder 负责 JWT 的编解码与验签,支持从 JWKS 端点加载公钥 ✓ 正确答案
D 它负责业务授权,把声明直接映射为权限
#

6. JWT 在前后端的存储(HttpOnly Cookie vs LocalStorage)

A LocalStorage 中的令牌无法被任何脚本读取
B 把 JWT 放 URL 参数中是安全且推荐的存储方式
C HttpOnly Cookie 存储在客户端,JS 无法读取也无需考虑 CSRF
D HttpOnly Cookie 抗 XSS 窃取但需处理 CSRF,LocalStorage 易被 XSS 读取但无 CSRF 问题 ✓ 正确答案
#

7. JWT 的结构(Header/Payload/Signature)

A JWT 的 Payload 是加密的,无法被他人解码
B Signature 包含用户明文密码
C JWT 的 Header 一定包含用户信息
D JWT 由 Header/Payload/Signature 三段组成,Payload 仅 Base64URL 编码可被解码,Signature 用于防篡改 ✓ 正确答案
#

8. JWT 的 Payload 编码(Base64URL)

A Base64URL 与标准 Base64 完全相同
B Base64URL 用 - 和 _ 替换 + 和 / 并去掉 = 填充,保证可在 URL 中安全传输,但编码不加密 ✓ 正确答案
C JWT 的 Payload 用标准 Base64 编码,包含 + 和 / 字符
D Base64URL 编码即加密,Payload 内容不可见
#

9. JWT 的 aud/iss/sub/exp/nbf/iat 的语义

A iat 用于标识 token 的受众
B aud 标识签发者,校验时无需关注
C exp 表示 token 的生效时间,之前的 token 无效
D iss 标识签发者、aud 标识受众、sub 标识主体,exp/nbf/iat 定义时间窗口,验证时需校验一致性 ✓ 正确答案
#

10. JWT 的 kid/jku/x5u 与密钥轮换

A kid 是 JWT 的载荷,用于存储用户信息
B kid 标识密钥使验证方在轮换时选择正确密钥,jwks 端点应可信,jku/x5u 在线拉取密钥需严格限制 ✓ 正确答案
C jku/x5u 可以安全地指向任意 URL 拉取密钥
D 密钥轮换时新旧密钥不能同时存在于 JWKS
#

11. JWT 的压缩(zip)与 alg 头部

A 服务端应直接信任 Header 中的 alg 选择验签算法
B zip 用于 JWT 的签名,与加密无关
C alg:none 是推荐的安全签名算法
D alg 指定算法,服务端必须用算法白名单而非信任 Header,防止算法混淆攻击与 none 算法 ✓ 正确答案
#

12. JWT 的安全漏洞(alg:none/密钥混淆)

A alg:none 是安全的,服务端可放心接受
B 把 RSA 公钥当作 HMAC 密钥验签是安全的
C alg:none 与密钥混淆攻击都源于服务端信任 Header 中的 alg,防御核心是固定算法白名单且不信任 Header ✓ 正确答案
D JWT 只要用了签名算法就绝对安全
#

13. JWT 的撤销机制(黑名单/短 TTL/Refresh Token)

A 黑名单方案完全无状态,无需任何存储
B 黑名单可精确即时撤销但有状态开销,短 TTL 无状态但存在泄露窗口,Refresh Token 提供间接控制 ✓ 正确答案
C 短 TTL 可以立即撤销已泄露的 JWT
D JWT 无法通过任何机制实现撤销
#

14. JWT 的时钟漂移(Clock Skew)容忍

A 验证方时钟偏差可能误判 exp/nbf,应设置合理时钟偏斜容忍度(如 30-60 秒)并配合 NTP 校时 ✓ 正确答案
B 时钟漂移只影响签名,不影响 exp 校验
C clockSkew 设置越大越好,完全不限制过期
D 验证方无需考虑签发方时钟偏差
#

15. JWT 的签名算法(HS256/RS256/ES256)的差异

A RS256 与 HS256 一样是对称算法
B ES256 使用共享密钥签发与验证
C HS256 对称需共享密钥,RS256/ES256 非对称用私钥签发公钥验证,适合多验证方并可通过 JWKS 分发公钥 ✓ 正确答案
D 三种算法都通过公钥分发实现签发与验证分离
#

16. JWT 的签名验证(MAC verify)

A HMAC 验证使用公钥,无需共享密钥
B 比较 HMAC 结果时使用普通字符串比较即可,无安全风险
C 可以把 RSA 公钥直接作为 HMAC 密钥使用
D 验证方用共享密钥对 Header.Payload 重算 HMAC 并与 Signature 比较,比较应使用常量时间算法 ✓ 正确答案
#

17. jwt.io 如何用于 JWT 解析与调试,其安全局限(密钥泄露/算法混淆)如何注意?

A jwt.io 适合开发调试解析 JWT,但绝不能把真实生产密钥或私钥粘贴进去,否则会泄露 ✓ 正确答案
B jwt.io 是官方权威的 JWT 验证库,可放心在生产环境使用
C 在 jwt.io 上验证通过就代表服务端验证逻辑正确
D jwt.io 只支持解密,不支持签名验证
#

18. nimbus-jose-jwt 库的使用

A 它只支持 JWS 不支持 JWK
B 它支持 JWT 签名/验签、JWE 加密与 JWK/JWKS 加载,是 Spring Security OAuth2 jose 的底层实现 ✓ 正确答案
C nimbus-jose-jwt 不支持从 JWKS 端点加载公钥
D 它只能签发 token,不能验签
#

19. JWS/JWE/JWK 与 JWKS 的工程应用

A JWS 与 JWE 都是加密令牌,无法解码
B JWKS 端点只用于签发,不用于验证
C JWE 只签名不加密,JWK 只包含私钥
D JWS 保证签名防篡改,JWE 保证内容加密,JWKS 是公钥集合用于分发与密钥轮换 ✓ 正确答案