核心结论
第三方登录的安全目标不仅是取得令牌,还要证明回调属于当前浏览器发起的那次事务、授权码只能由预期客户端兑换、身份响应来自预期发行方,并且最终身份绑定到正确的本地账号。浏览器和移动端等不能可靠保存客户端秘密的公开客户端,应采用授权码流程并启用 PKCE,使用高熵、一次性的 state 绑定登录事务;采用 OpenID Connect 时还要验证 ID Token 的签名、iss、aud、时间声明及 nonce。
底层机制
登录开始时生成高熵 code_verifier,计算对应的 code_challenge,并在授权请求中提交挑战值。回调取得授权码后,兑换令牌必须提交