OAuth 2.0 是一种授权协议(authorization framework),用于让第三方应用在不获取用户密码的前提下,访问用户在其他服务上的资源(如用户的谷歌照片、GitHub 仓库、微博信息等)。
它解决的问题简单说就是:
“我想授权某个应用访问我的某些账户信息,但不想给它我的密码。”
比如你去银行办业务,需要朋友帮你代办,但你又不想把你的银行卡密码告诉他。
OAuth2 就像是银行提供的一张“代办授权卡”:
OAuth2 定义了四个关键角色:
角色 | 说明 |
---|---|
资源拥有者(Resource Owner) | 通常是用户本人 |
客户端(Client) | 第三方应用,如知乎、印象笔记等 |
授权服务器(Authorization Server) | 授权逻辑的提供者,比如 Google、GitHub |
资源服务器(Resource Server) | 存放资源的地方,比如 Google Drive |
最标准流程如下:
你可以把 access token 看作是“访问资源的通行证”。
OAuth2 定义了 4 种授权方式,最常见是前两种:
授权方式 | 使用场景 |
---|---|
授权码模式(Authorization Code) | 最安全,适用于 Web 应用 |
简化模式(Implicit) | 主要用于单页应用(SPA),但已不推荐 |
密码模式(Password) | 用户直接把账号密码给客户端,安全性差,已不推荐 |
客户端凭证模式(Client Credentials) | 应用于系统对系统之间的服务访问(如微服务内部通信) |