OAuth 开放授权协议
Open Authorization —— 在应用间共享指定访问权的开放标准授权协议。当前主流是 OAuth 2.0 / 2.1。
解决什么问题
以前: 第三方 App 想读你的 Google Calendar?你得把 Google 密码给它。一旦它被攻破 → 你的整个 Google 账号没了。
OAuth 把这事改了:
- App 把你重定向到 Google
- 你在 Google 登录、勾选授权范围
- Google 发一个访问令牌(access token)给 App
- App 拿 token 调 API,永远拿不到你的密码
而且 token 可以随时撤销、有作用域(scope)、有有效期。
OAuth ≠ Authentication
- OAuth 回答”这个 App 能干啥”
- 想做”用户是谁”——用 OpenID Connect (OIDC),OIDC 是建在 OAuth 上的认证层
四种 Grant Type
| Grant | 用在哪 |
|---|---|
| Authorization Code | Web 应用,最常见(+ PKCE 给 SPA / 移动端) |
| Client Credentials | 服务端到服务端,没有用户 |
| Device Code | 智能电视、IoT 输入不便的设备 |
| OAuth 2.1 已弃用 |
常见安全坑
- redirect_uri 没严格校验 → token 被劫
- state 参数没用 → CSRF
- SPA 没用 PKCE → token 拦截
- access token 时间太长 → 泄露后窗口期大