MST

星途 面试题库

面试题:安全认证:PKCE 扩展机制在不同场景下的应用

假设你正在开发一个移动应用,该应用使用 OAuth 2.0 进行用户认证并接入第三方服务。描述如何在这个场景中合理运用 PKCE 扩展机制,并说明各个参数(如 code_verifier、code_challenge 等)的生成与使用方式。
36.4万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

1. PKCE 扩展机制的运用场景

在移动应用使用 OAuth 2.0 进行用户认证接入第三方服务时,由于移动应用环境的特殊性(如无法安全存储客户端密钥),PKCE(Proof Key for Code Exchange)机制可增强安全性,防止授权码被拦截盗用。

2. 参数生成

  • code_verifier
    • 生成方式:应用生成一个长度在 43 - 128 个字符之间的随机字符串,该字符串由 ASCII 字符集中的字母数字字符(a-zA-Z0-9)以及以下特殊字符组成:-._~。例如,可以使用密码学安全的伪随机数生成器来生成此字符串。
  • code_challenge
    • 生成方式:基于生成的 code_verifier,通过特定的哈希算法生成 code_challenge。推荐使用 SHA - 256 算法,将 code_verifier 进行哈希计算后,再对结果进行 Base64URL 编码,得到 code_challenge

3. 参数使用

  • 授权请求阶段
    • 应用在向授权服务器发起授权请求时,将生成的 code_challenge 作为请求参数发送,并指定使用的哈希算法(如 code_challenge_method=S256 表示使用 SHA - 256 算法)。例如,请求 URL 可能类似:https://authorization-server.com/authorize?response_type=code&client_id=your_client_id&redirect_uri=your_redirect_uri&scope=your_scope&code_challenge=your_code_challenge&code_challenge_method=S256
  • 授权码获取阶段
    • 授权服务器验证请求,确认无误后,向应用的重定向 URI 返回授权码(authorization code)。
  • 令牌请求阶段
    • 应用使用获取到的授权码以及原始生成的 code_verifier 向令牌端点请求访问令牌。请求格式类似:https://token-server.com/token?grant_type=authorization_code&code=authorization_code&redirect_uri=your_redirect_uri&client_id=your_client_id&code_verifier=your_code_verifier
    • 令牌服务器接收到请求后,根据 code_verifier 重新计算 code_challenge,并与授权请求时的 code_challenge 进行比对,若一致则发放访问令牌,从而确保授权码使用的安全性。