-

OAuth 2.0 - 快速指南

OAuth 2.0 - 概述

什么是OAuth 2.0?

OAuth是一种开放的授权协议,它允许通过在诸如Facebook,GitHub等HTTP服务上启用客户端应用程序来访问资源所有者的资源。它允许将存储在一个站点上的资源共享到另一站点而不使用其凭据。它使用用户名和密码令牌代替。

OAuth 2.0由IETF OAuth工作组于2012年10月发布。

为什么要使用OAuth 2.0?

OAuth 2.0的功能

OAuth 2.0的优点

OAuth 2.0的缺点

OAuth 2.0 - 架构

在本章中,我们将探讨OAuth 2.0的架构风格。

OAuth 2.0架构

步骤1 - 首先,用户使用客户端应用程序(如Google,Facebook,Twitter等)访问资源。

步骤2 - 接下来,在注册重定向URI(统一资源标识符)期间,将向客户端应用程序提供客户端ID和客户端密码。

步骤3 - 用户使用认证应用程序登录。客户端ID和客户端密码对授权服务器上的客户端应用程序是唯一的。

步骤4 - 验证服务器使用授权码将用户重定向到重定向统一资源标识符(URI)。

步骤5 - 用户访问位于客户端应用程序中的重定向URI的页面。

步骤6 - 客户端应用程序将提供验证码,客户端ID和客户端密码,并将其发送到授权服务器。

步骤7 - 认证应用程序向客户端应用程序返回访问令牌。

步骤8 - 客户端应用程序获取访问令牌后,用户将使用客户机应用程序开始访问资源所有者的资源。

OAuth 2.0有各种概念,下表简要说明。

Sr.No. 概念与描述
1 术语

OAuth提供了一些额外的术语来了解授权的概念。

2 网络服务器

Web服务器提供网页,并使用HTTP向用户提供形成网页的文件。

3 用户代理

用户代理应用程序由用户设备中的客户端应用程序使用,用作脚本语言实例。

4 本地应用程序

本地应用程序可以用作桌面或手机应用程序的实例,它使用资源所有者密码凭据。

OAuth 2.0 - 客户端凭据

当客户端是资源所有者时,或当授权范围仅限于受客户端控制的受保护资源时,客户端凭据可以用作授权许可。

下图描述了客户端凭据流。

客户凭证流程

上图所示的流程包括以下步骤:

步骤1 - 客户端与授权服务器进行身份验证,并从令牌端点发出访问令牌请求。

步骤2 - 授权服务器验证客户端,并提供访问令牌,如果它有效并被授权。

下表列出了客户端凭据的概念。

Sr.No. 概念与描述
1 获取最终用户授权

授权终点通常是资源所有者登录并允许访问客户端应用程序的数据的授权服务器上的URI。

2 授权响应

授权响应可用于获取访问令牌,以使用授权码来访问系统中的所有者资源。

3 错误响应和代码

如果在授权过程中发生错误,授权服务器会以HTTP 400或401(错误请求)状态代码进行响应。

OAuth 2.0 - 获取访问令牌

访问令牌是标识用户,应用程序或页面的字符string。令牌包括诸如令牌将何时到期以及哪个应用程序创建该令牌的信息。

您必须在开始时将用户发送到授权端点。以下是虚拟请求的示例

https://publicapi.example.com/oauth2/authorize?client_id=your_client_id&redirect_uri=your_url 
   &response_type=code

以下是参数及其描述。

下表列出了客户端凭据的概念。

Sr.No. 概念与描述
1 授权码

授权代码允许访问授权请求,并允许访问客户端应用程序来获取所有者资源。

2 资源所有者密码凭证

资源所有者密码凭据仅包含一个请求和一个响应,并且在资源所有者与客户端具有良好关系的情况下很有用。

3 break

断言是一系列信息,可以跨各个安全域共享身份和安全信息。

4 刷新令牌

刷新令牌用于获取新的访问令牌,其携带获得新的访问令牌所必需的信息。

访问令牌响应

访问令牌是授权服务器分配的令牌类型。

6 访问令牌错误响应代码

如果授权服务器发出的令牌访问请求无效或未经授权,则授权服务器返回错误响应。

OAuth 2.0 - 访问受保护的资源

客户端向资源服务器提供访问令牌以访问受保护的资源。资源服务器必须验证并验证访问令牌是否有效并且尚未过期。

发送凭证有两种标准方式 -

它们包含在授权标题中,如下所示:

Authorization: Bearer [token-value]

例如 -

GET/resource/1 HTTP /1.1
Host: example.com
Authorization: Bearer abc...

下表显示访问受保护资源的概念。

Sr.No. 概念与描述
1 经过身份验证的请求

它用于获取用于访问系统中所有者资源的授权码令牌。

2 WWW验证响应头域

如果受保护的资源请求包含无效的访问令牌,则资源服务器包括“WWW-Authenticate”响应头字段。

OAuth 2.0 - 可扩展性

访问令牌类型可以被定义的方式有两种:

定义新的端点参数

参数名称必须遵守参数名称ABNF(增强的Backus-Naur表单是基于Backus-Naur表单的元语言,由其自己的语法和派生规则组成),参数值的语法必须被明确定义。

param-name = 1* name-char
name-char = "-" / "." / "_" / DIGIT / ALPHA

定义新的授权类型

在“grant_type”参数的帮助下,可以为新的授权许可类型分配一个不同的绝对URI。扩展授权类型必须在OAuth参数注册表中注册,如果它需要额外的令牌端点参数。

定义新的授权端点响应类型

response-type = response-name *(SP response-name)
response-name = 1* response-char
response-char = "_" / DIGIT / ALPHA

将响应类型作为空格分隔的值列表进行比较,如果它具有一个或多个空格字符,其中值的顺序不重要,并且只能注册一个值的顺序。

定义附加错误代码

必须注册扩展错误代码,如果它们使用的扩展名是已注册的访问令牌或注册的端点参数。错误代码必须遵循错误ABNF(增强的Backus-Naur表单),并且在可能的情况下应该以标识它的名称作为前缀。

error = 1 * error_char
error-char =  %x20-21 / %x23-5B / 5D-7E

OAuth 2.0 - IANA注意事项

IANA代表 NTERNET ssigned Ñ umbers 其中提供了关于相关的登记值的信息uthority ř表情 uthentication ð IAL Ñ ü SER 小号 ervice(RADIUS)。

IANA包括以下注意事项 -

OAuth访问令牌类型注册表

OAuth访问令牌由具有规定的专家注册。如果他们对注册感到满意,那么他们才会公布规范。注册请求将发送到@ ietf.org以与主题进行审核(“请求访问令牌类型:示例”)。专家将在请求后14天内拒绝或接受请求。

注册模板

注册模板包含以下规范 -

OAuth参数注册表

OAuth参数注册表包含授权端点请求或响应的注册,令牌端点请求或具有所需规范的专家的响应。注册请求将发送给专家,如果他们对注册感到满意,他们将公布规范。

注册模板

注册模板包含上述OAuth访问令牌类型注册表部分中定义的类型名称,更改控制器规范文档等规范,但以下规范除外 -

参数使用位置 - 它指定参数的位置,如授权请求或响应,令牌请求或响应。

初始注册表内容

下表显示包含初始内容的OAuth参数注册表 -

Sr.No. 参数名称及用途位置 变更控制器 规格文件
1

CLIENT_ID

授权请求,令牌请求

IETF RFC 6749
2

client_secret

令牌请求

IETF RFC 6749
3

RESPONSE_TYPE

authorization_request

IETF RFC 6749
4

REDIRECT_URI

授权请求,授权

IETF RFC 6749

范围

授权请求或响应,令牌请求或响应

IETF RFC 6749
6

授权请求或响应

IETF RFC 6749
7

令牌请求,授权响应

IETF RFC 6749
8

ERROR_DESCRIPTION

授权响应,令牌响应

IETF RFC 6749
9

error_uri

授权响应,令牌响应

IETF RFC 6749
10

grant_type

令牌请求

IETF RFC 6749
11

的access_token

授权响应,令牌响应

IETF RFC 6749
12

token_type

授权响应,令牌响应

IETF RFC 6749
13

过期日期在

授权响应,令牌响应

IETF RFC 6749
14

用户名

令牌请求

IETF RFC 6749
15

密码

令牌请求

IETF RFC 6749
16

refresh_token

令牌请求,令牌响应

IETF RFC 6749

OAuth授权端点响应类型注册表

这可以用于定义OAuth授权端点响应类型注册表。响应类型由具有所需规格的专家注册,如果他们对注册感到满意,那么他们将公布规范。注册请求将发送到@ ietf.org进行审核。专家将在请求后14天内拒绝或接受请求。

注册模板

注册模板包含上述OAuth访问令牌类型注册表部分中定义的类型名称,更改控制器规范文档等规范

初始注册表内容

下表显示了包含初始内容的授权端点响应类型注册表。

Sr.No. 参数名称 变更控制器 规格文件
1 IETF RFC 6749
2 代币 IETF RFC 6749

OAuth扩展错误注册表

这可以用于定义OAuth扩展错误注册表。错误代码以及协议扩展(如授权类型,令牌类型等)由具有所需规范的专家注册。如果他们对注册感到满意,那么他们将发布规范。注册请求将发送到@ ietf.org以与主题进行审核(“请求错误代码:示例”)。专家将在请求后14天内拒绝或接受请求。

注册模板

注册模板包含上述OAuth访问令牌类型注册表部分中定义的变更控制器规范文档等规范,但以下规范除外 -