OAuth 2.0 是一种授权协议(authorization framework),用于让第三方应用在不获取用户密码的前提下,访问用户在其他服务上的资源(如用户的谷歌照片、GitHub 仓库、微博信息等)。
它解决的问题简单说就是:
“我想授权某个应用访问我的某些账户信息,但不想给它我的密码。”
简化理解:OAuth2 像“临时访问证”
比如你去银行办业务,需要朋友帮你代办,但你又不想把你的银行卡密码告诉他。
OAuth2 就像是银行提供的一张“代办授权卡”:
- 有效期有限(access token 有时效)
- 权限受限(只允许查余额、不能取钱)
- 可随时吊销(refresh token 过期或用户主动取消授权)
OAuth2 的核心角色
OAuth2 定义了四个关键角色:
角色 | 说明 |
---|---|
资源拥有者(Resource Owner) | 通常是用户本人 |
客户端(Client) | 第三方应用,如知乎、印象笔记等 |
授权服务器(Authorization Server) | 授权逻辑的提供者,比如 Google、GitHub |
资源服务器(Resource Server) | 存放资源的地方,比如 Google Drive |
OAuth2 授权流程(授权码模式,最常见)
最标准流程如下:
- 用户打开第三方应用 → 点“用 GitHub 登录”
- 第三方应用重定向 到 GitHub 登录授权页面
- 用户在 GitHub 登录并授权
- GitHub 返回授权码(authorization code)给第三方应用
- 第三方应用 用授权码换取 token
- 获取到 access token 后,第三方就能用它访问你的 GitHub 数据
你可以把 access token 看作是“访问资源的通行证”。
OAuth2 有哪些授权方式?
OAuth2 定义了 4 种授权方式,最常见是前两种:
授权方式 | 使用场景 |
---|---|
授权码模式(Authorization Code) | 最安全,适用于 Web 应用 |
简化模式(Implicit) | 主要用于单页应用(SPA),但已不推荐 |
密码模式(Password) | 用户直接把账号密码给客户端,安全性差,已不推荐 |
客户端凭证模式(Client Credentials) | 应用于系统对系统之间的服务访问(如微服务内部通信) |
OAuth 2 的常见误解
- OAuth 是授权,不是认证。
想要“登录身份”的还需要配合 OpenID Connect。 - Access Token 不等于用户身份。
Access Token 是授权代表,不能直接断言用户是谁。