OAuth 2.0 是什么
OAuth 2.0 是一个授权框架:资源所有者授权客户端代表其访问受保护资源,核心角色包括资源服务器、授权服务器与客户端。它解决的是授权问题,不解决身份认证;把两者混用是协议选型中最常见的错误,需要认证能力时应叠加 OpenID Connect。
模式怎么选
有用户参与的交互式应用使用授权码模式并配合 PKCE,避免在公开客户端里存放密钥;服务之间的机器调用使用客户端凭证模式,此时没有用户上下文;输入受限的设备使用设备码模式,分设备授权与用户授权两步完成。隐式模式与密码模式因令牌泄露风险已不再推荐。
授权模式
| 模式 | 适用 | 要点 |
|---|---|---|
| 授权码加 PKCE | Web 与移动应用 | 不暴露客户端密钥,防授权码拦截 |
| 客户端凭证 | 服务间调用 | 代表客户端自身,无用户上下文 |
| 设备码 | 输入受限设备 | 分设备与用户两步确认 |
| 隐式与密码模式 | 已不推荐 | 存在令牌泄露与凭据暴露风险 |
基本信息
| 令牌 | 访问令牌有时效,刷新令牌用于续期 |
|---|---|
| 作用域 | 按最小权限申请,避免一次授予全量 |
| 重定向地址 | 必须严格白名单校验,防止被劫持 |
| 安全要求 | 全程 HTTPS,携带状态参数,配合 PKCE |
典型使用场景
- 第三方登录授权:让用户授权客户端访问其账号数据
- 第三方数据读取:按作用域限制可访问的资源范围
- 企业内部单点登录:配合 OIDC 完成身份认证
- 开放平台接口授权:给第三方应用发放受限凭据
- 服务间机器调用:用客户端凭证获取服务身份令牌
OAuth 2.0 解决授权问题,认证问题由 OIDC 补充。区分两者可以避免协议选型混用,也能避免把访问令牌当成用户身份档案使用。