面试官:OAuth2.0 授权码模式为什么最安全?——从密码模式的血泪教训讲起
引言 前年接一个第三方平台对接,对方技术说"我们用 OAuth2.0 密码模式对接吧,简单直接"。我图省事同意了。上线三个月后出事了——合作方的服务器被黑了,攻击者从日志里捞到了一批用户密码(明文记在请求日志里),拿这些密码去试其他平台的撞库,引发了客诉。 事后复盘,问题的根源不是日志没脱敏,而是密码模式本身的设计缺陷:用户的密码经过了第三方客户端,客户端就是不可信的。一旦客户端被攻破或日志管理不严,密码必然泄漏。而用户在不同平台复用密码的比例高达 60%——一个平台泄密,多个平台遭殃。 后来我们把对接方式全部迁移到授权码模式:用户密码只在授权服务器上输入,客户端永远接触不到密码,只能拿到一个一次性的授权码(code),用 code 换 token。再后来 SPA 和移动端普及,授权码又暴露了"code 拦截"风险,于是有了 PKCE 增强。 这篇文章把 OAuth2.0 四种授权模式从"为什么不安全"到"怎么变安全"完整讲一遍,最后附 Spring Security OAuth2 的实现代码。面试被问"授权码模式为什么最安全",这篇的内容够你聊二十分钟。 一、OAuth2.0 到底....