OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
———— 阮一峰
OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。......资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
———— 《RFC 6749》
OAuth 2.0四种角色
- 资源所有者:能够授予受保护资源访问权的实体。如果资源所有者是人,他被称为终端用户。
- 资源服务器:承载受保护资源的服务器,通过访问令牌接受并响应受保护的资源请求。
- 客户端:代表资源所有者及其授权发出受保护资源请求的应用程序。
- 授权服务器:成功验证资源所有者并获得授权后,向客户端颁发访问令牌的服务器。
OAuth 2.0四种模式
授权码授权模式(Authorization Code Grant)
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI ---->| |
| User- | | Authorization |
| Agent -+----(B)-- User authenticates --->| Server |
| | | |
| -+----(C)-- Authorization Code ---<| |
+-|----|---+ +---------------+
| | ^ v
(A) (C) | |
| | | |
^ v | |
+---------+ | |
| |>---(D)-- Authorization Code ---------' |
| Client | & Redirection URI |
| | |
| |<---(E)----- Access Token -------------------'
+---------+ (w/ Optional Refresh Token)
基本流程:
1、通过前端渠道,客户获取授权码
2、通过后端渠道,客户使用授权码去交换Access Token和可选的Refresh Token
3、假定资源拥有者和客户在不同的设备上
4、最安全的流程,因为令牌不会传递经过User-Agent
内部授权模式(Implicit Grant)
+----------+
| Resource |
| Owner |
| |
+----------+
^
|
(B)
+----|-----+ Client Identifier +---------------+
| -+----(A)-- & Redirection URI --->| |
| User- | | Authorization |
| Agent -|----(B)-- User authenticates -->| Server |
| | | |
| |<---(C)--- Redirection URI ----<| |
| | with Access Token +---------------+
| | in Fragment
| | +---------------+
| |----(D)--- Redirection URI ---->| Web-Hosted |
| | without Fragment | Client |
| | | Resource |
| (F) |<---(E)------- Script ---------<| |
| | +---------------+
+-|--------+
| |
(A) (G) Access Token
| |
^ v
+---------+
| |
| Client |
| |
+---------+
Note: The lines illustrating steps (A) and (B) are broken into two
parts as they pass through the user-agent.
基本流程:
1、适用于公开的浏览器单页应用
2、Access Token直接从授权服务器返回(只有前端渠道)
3、不支持Refresh Token
4、假定资源所有者和公开客户应用在同一设备上
5、容易受到中间人攻击
密码凭证授权模式(Password Credentials Grant)
+----------+
| Resource |
| Owner |
| |
+----------+
v
| Resource Owner
(A) Password Credentials
|
v
+---------+ +---------------+
| |>--(B)---- Resource Owner ------->| |
| | Password Credentials | Authorization |
| Client | | Server |
| |<--(C)---- Access Token ---------<| |
| | (w/ Optional Refresh Token) | |
+---------+ +---------------+
基本流程:
1、使用用户名/密码作为授权方式从授权服务器上获取Access Token
2、一般不支持Refresh Token
3、假定资源所有者和公开客户应用在同一设备上
客户端凭证授权模式(Client Credentials Grant)
+---------+ +---------------+
| | | |
| |>--(A)- Client Authentication --->| Authorization |
| Client | | Server |
| |<--(B)---- Access Token ---------<| |
| | | |
+---------+ +---------------+
基本流程:
1、适用于服务期间通信场景,机密客户代表它自己或者一个用户
2、只有后端渠道,使用客户凭证获取一个Access Token
3、因为客户凭证可以使用对称或者非对称加密,该方式支持共享密码或证书
引用:
1、RFC6749
2、OAuth 2.0 的一个简单解释
3、OAuth 2.0 的四种方式
4、《微服务安全架构和实践》微课程