测验:OIDC 令牌
JWT 的标头和载荷是什么状态?
- 只是经过 Base64URL 编码,任何人都能读取
- 经过对称密钥加密
- 经过 gzip 压缩
- 包含在签名值之中
如果漏掉对 aud 声明的验证,会发生什么?
- 过期令牌仍会通过
- 同一认证服务器签发给其他 API 的令牌也会通过
- 即使公钥正确,签名验证也会失败
- 刷新令牌交换开始被拒绝
本地验证 JWT 相比 introspection 的优点及代价是什么?
- 验证更准确/每次都更慢
- 无需网络往返,因此更快/无法立即反映撤销
- 更能防止令牌被盗/实现更复杂
- 这是标准方式/必须使用缓存
为什么 JWT 标头需要 kid?
- 用于标识单个令牌
- 当 JWKS 中有多个公钥时,指出应使用哪一个来验证签名
- 用作缓存验证结果的键
- 用于标识签发令牌的服务器
为什么不能使用 ID 令牌调用 API?
- 因为 ID 令牌太大,无法放进请求标头
- 因为 ID 令牌的有效期太短
- 因为 ID 令牌的 aud 指向客户端应用,而不是 API 服务器
- 因为它与访问令牌采用不同的签名方式
如果不验证标头中的 alg,可能遭受什么攻击?
- 利用 none 算法或算法混淆绕过签名验证
- 重放截获的令牌
- 从其他网站伪造请求的 CSRF 攻击
- 在登录前植入会话 ID 的会话固定攻击