OAuth 2.0的必备知识点 (一)

108 阅读3分钟

一、OAuth 2.0 关键点

1. 核心角色

  • 用户(Resource Owner) :拥有资源的人,例如你的 Google 账户。
  • 客户端(Client) :第三方应用,例如一个博客网站,希望访问你的 Google 相册。
  • 授权服务器(Authorization Server) :负责验证用户身份并颁发访问令牌(Access Token),例如 Google 的登录页面。
  • 资源服务器(Resource Server) :存储用户资源的服务器,例如 Google 相册。

2. 核心概念

  • 访问令牌(Access Token) :客户端使用它来访问用户的资源。
  • 授权码(Authorization Code) :客户端通过它换取访问令牌。
  • 作用域(Scope) :定义客户端可以访问的资源范围,例如“只读访问”或“读写访问”。

3. 类比

  • 用户:你(Resource Owner)。
  • 客户端:一个旅行社(Client)。
  • 授权服务器:护照签发机构(Authorization Server)。
  • 资源服务器:其他国家(Resource Server)。

流程

  1. 你想去某个国家旅游(访问资源)。
  2. 旅行社(客户端)帮你申请签证(访问令牌)。
  3. 你到护照签发机构(授权服务器)办理签证。
  4. 护照签发机构验证你的身份后,给你签证(访问令牌)。
  5. 你拿着签证(访问令牌)进入目标国家(资源服务器)。

二、OAuth 2.0 的工作原理

OAuth 2.0 有四种授权模式,最常用的是 授权码模式(Authorization Code Grant) 。以下是授权码模式的工作流程。


1. 授权码模式的工作流程

(1) 用户访问客户端

  • 用户访问客户端应用(例如一个博客网站)。
  • 客户端需要访问用户的资源(例如 Google 相册)。

(2) 重定向到授权服务器

  • 客户端将用户重定向到授权服务器(例如 Google 的登录页面)。
  • 重定向 URL 包含客户端 ID、重定向 URI 和请求的作用域(Scope)。

(3) 用户登录并授权

  • 用户在授权服务器上登录并同意客户端的请求。
  • 授权服务器生成一个授权码(Authorization Code)并重定向回客户端。

(4) 客户端获取访问令牌

  • 客户端使用授权码向授权服务器请求访问令牌(Access Token)。
  • 授权服务器验证授权码并返回访问令牌。

(5) 客户端访问资源服务器

  • 客户端使用访问令牌访问资源服务器(例如 Google 相册)。
  • 资源服务器验证访问令牌并返回请求的资源。

2. 授权码模式的图解

+-------------------+       +-------------------+       +-------------------+
|   User            |       |   Client          |       |   Auth Server     |
|   (Resource Owner)|       |   (Blog Website)  |       |   (Google)        |
+-------------------+       +-------------------+       +-------------------+
         |                          |                          |
         | 1. 访问博客网站          |                          |
         |------------------------->|                          |
         |                          |                          |
         | 2. 重定向到 Google 登录  |                          |
         |<-------------------------|                          |
         |                          |                          |
         | 3. 用户登录并授权        |                          |
         |------------------------->|                          |
         |                          |                          |
         | 4. 返回授权码            |                          |
         |<-------------------------|                          |
         |                          |                          |
         | 5. 使用授权码获取令牌     |                          |
         |------------------------->|                          |
         |                          |                          |
         | 6. 返回访问令牌           |                          |
         |<-------------------------|                          |
         |                          |                          |
         | 7. 使用令牌访问 Google 相册|                          |
         |---------------------------------------------------->|
         |                          |                          |
         | 8. 返回相册数据           |                          |
         |<----------------------------------------------------|

三、OAuth 2.0 的其他授权模式

1. 隐式模式(Implicit Grant)

  • 适用于纯前端应用(如单页应用)。
  • 直接返回访问令牌,不经过授权码。

2. 密码模式(Resource Owner Password Credentials Grant)

  • 用户直接将用户名和密码提供给客户端。
  • 适用于高度信任的客户端(如官方应用)。

3. 客户端凭证模式(Client Credentials Grant)

  • 客户端使用自己的凭证获取访问令牌。
  • 适用于客户端访问自己的资源。