OAuth 开放授权协议

Open Authorization —— 在应用间共享指定访问权的开放标准授权协议。当前主流是 OAuth 2.0 / 2.1

解决什么问题

以前: 第三方 App 想读你的 Google Calendar?你得把 Google 密码给它。一旦它被攻破 → 你的整个 Google 账号没了。

OAuth 把这事改了:

  1. App 把你重定向到 Google
  2. 在 Google 登录、勾选授权范围
  3. Google 发一个访问令牌(access token)给 App
  4. App 拿 token 调 API,永远拿不到你的密码

而且 token 可以随时撤销、有作用域(scope)、有有效期

OAuth ≠ Authentication

最容易踩的坑。OAuth 是 授权,不是 认证

  • OAuth 回答”这个 App 能干啥”
  • 想做”用户是谁”——用 OpenID Connect (OIDC),OIDC 是建在 OAuth 上的认证层

四种 Grant Type

Grant用在哪
Authorization CodeWeb 应用,最常见(+ PKCE 给 SPA / 移动端)
Client Credentials服务端到服务端,没有用户
Device Code智能电视、IoT 输入不便的设备
ImplicitPasswordOAuth 2.1 已弃用

常见安全坑

  • redirect_uri 没严格校验 → token 被劫
  • state 参数没用 → CSRF
  • SPA 没用 PKCE → token 拦截
  • access token 时间太长 → 泄露后窗口期大