面试题答案
一键面试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
)。
- 授权服务器验证请求,确认无误后,向应用的重定向 URI 返回授权码(
- 令牌请求阶段:
- 应用使用获取到的授权码以及原始生成的
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
进行比对,若一致则发放访问令牌,从而确保授权码使用的安全性。
- 应用使用获取到的授权码以及原始生成的