面试题答案
一键面试PKCE 扩展机制简述
PKCE(Proof Key for Code Exchange)是 OAuth 2.0 的一种扩展机制,用于在授权码模式下增强安全性。在这种机制中,客户端在发起授权请求时生成一对码验证密钥(Code Verifier)和码挑战(Code Challenge)。码验证密钥是一个长度至少 43 个字符且不超过 128 个字符的随机字符串,码挑战则是通过对码验证密钥进行特定的哈希运算(如 S256 算法)生成的。客户端将码挑战发送给授权服务器,授权服务器在授权码颁发过程中记录该码挑战。当客户端使用授权码换取访问令牌时,需将码验证密钥发送给令牌端点,令牌端点通过对码验证密钥进行相同哈希运算并与之前记录的码挑战进行比对,以验证客户端的身份。
解决的安全问题
- 防止授权码拦截攻击:在传统 OAuth 2.0 授权码模式中,如果授权码在传输过程中被拦截,攻击者可以使用该授权码获取访问令牌。而 PKCE 通过在换取访问令牌时增加对码验证密钥的验证,攻击者即使拦截到授权码,由于没有码验证密钥也无法成功换取访问令牌。
- 保护公共客户端安全:对于没有客户端密钥(如原生应用、JavaScript 应用等公共客户端),无法使用客户端密钥进行身份验证。PKCE 提供了一种无需客户端密钥的安全验证方式,使得公共客户端在 OAuth 2.0 流程中也能获得较好的安全性。