[PDF] GM/T 0068-2019 - 自动发货. 英文版
| 标准号码 | 美元 | 购买PDF | 工期 | 标准名称(英文版) |
| GM/T 0068-2019 | 380 | GM/T 0068-2019 | 9秒内发货PDF | 开放的第三方资源授权协议框架 |
| 基本信息 | |
|---|---|
| 标准编号 | GM/T 0068-2019 (GM/T0068-2019) |
| 中文名称 | 开放的第三方资源授权协议框架 |
| 英文名称 | Open Third-Party Resource Authorization Protocol Frame |
| 行业 | Chinese Industry Standard (推荐) |
| 中标分类 | L80 |
| 国际标准分类 | 35.040 |
| 字数估计 | 29,280 |
| 发布日期 | 2019 |
| 实施日期 | 2019-07-12 |
| 发布机构 | 国家密码管理局 |
GM/T 0068-2019: 开放的第三方资源授权协议框架
GM/T 0068-2019 英文名称: Open third party resource authorization protocol framework
中华人民共和国密码行业标准
开放的第三方资源授权协议框架
国家密码管理局 发 布
1 范围
本标准规定了第三方资源授权协议的流程、不同类型的授权许可、协议各端点的功能要求以及系统
实体之间传递消息的格式和参数要求等。
本标准适用于在互联网跨安全域应用场景中,身份鉴别与授权服务的开发、测试、评估和采购。
2 规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文
件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
5 概述
5.1 协议流程
本标准定义的基本协议流程如图1所示。
图1所示的OAuth流程描述了第三方应用程序、资源拥有者、授权服务器、资源服务器等四种角色
之间的交互,OAuth参数说明参见附录A中的A.1,协议基本流程如下:
a) 第三方应用程序向资源拥有者请求授权。第三方应用程序请求资源拥有者授权许可的方式有
两种,一种是直接发送请求给资源拥有者,另一种是间接地通过授权服务器作为中介发送请求
给资源拥有者。本标准推荐第三方应用程序使用授权服务器作为中介的方式来获取资源拥有
者的授权许可,在图2和图3中给出了示意;
b) 资源拥有者(或者资源拥有者间接地通过授权服务器,如步骤a)中所述)发放授权许可给第三
方应用程序。该授权许可是资源拥有者授权的凭据,采用的类型为7.1.1所定义的四种类型之
一。授权许可的类型取决于第三方应用程序请求授权许可的方式(即步骤a)中描述的两种方
式)和授权服务器所支持的授权许可类型(通常由授权服务器的服务文档提供);
c) 第三方应用程序对授权服务器进行鉴别并呈递授权许可,向授权服务器请求访问令牌;
d) 授权服务器鉴别第三方应用程序的身份并验证授权许可的有效性,如果第三方应用程序身份
鉴别通过且授权许可有效,则授权服务器向第三方应用程序发放访问令牌;
e) 第三方应用程序向资源服务器发送访问令牌及相关参数,用以请求访问受保护资源;
f) 资源服务器验证访问令牌的有效性。如果访问令牌有效,则将请求的资源返回给第三方应用
程序。
基于上述协议流程,第三方应用程序可通过资源拥有者使用的用户代理(如浏览器)与资源拥有者
进行交互,在某些特定情形下(见7.5),第三方应用程序可不与资源拥有者交互,直接使用第三方应用程
序的身份凭据获取授权服务器发放的访问令牌。如果第三方应用程序对受保护资源的访问超出访问令
牌范围或有效期,则访问失效,第三方应用程序应重新开始协议流程或采用本标准规定的刷新机制进行
访问令牌更新。
本标准中使用超文本传输协议HTTP1.1(见RFC2616)进行通信。基于其他任何协议的开放的第
三方资源授权协议框架,不属于本标准的讨论范围。
5.2 协议通道要求
对于授权码、访问令牌、刷新令牌、资源拥有者口令凭据以及第三方应用程序身份凭据等敏感的数
据,不应采用明文传输方式,应采用GM/T 0024-2014定义的安全传输层协议进行传输。授权服务器
应与第三方应用程序进行双向鉴别。由于和参数(见7.2.2)可能通过不安全信道传输,
或被存储于不安全环境,因此,它们不应以明文形式包含第三方应用程序或资源拥有者的敏感信息。
5.3 协议端点
5.3.1 协议端点类型
授权过程使用了两个授权服务器上的端点:
a) 授权端点;
b) 令牌端点。
以及一个第三方应用程序的端点:重定向端点。
并非每一类授权许可类型的授权流程都使用了以上三种端点。
授权端点和令牌端点允许第三方应用程序在请求中添加参数,用该参数指明资源访问请求
中请求的受保护资源访问范围。相应地,授权服务器通过在响应中包含参数来告知第三方应用
程序其被发放的访问令牌的受保护资源访问范围。
参数的值以一组由空格分隔的大小写敏感的字符串表示,字符串的顺序不影响解析(“ab”
等价于“ba”)。参数所包含字符串的含义由授权服务器定义,通常由授权服务器的服务文档
提供。
根据授权服务器的策略或者是资源拥有者的参与,授权服务器可全部或部分地拒绝第三方应用程
序所请求的受保护资源访问范围。如果所发放的访问令牌的受保护资源访问范围与第三方应用程序所
请求的不同,授权服务器应在响应中包含参数,以告知第三方应用程序其实际被允许的受保护
资源访问范围。
如果第三方应用程序在请求授权时省略了参数,授权服务器应使用预定义的默认值回应此
请求,或者拒绝此请求。授权服务器应在其服务文档中对参数的要求和默认值进行说明。
端点使用 URI进行标识。URI的典型格式是:[方案(scheme):][//主机名(authority)][路径
(path)][? 查询组件(query)][#片段组件(fragment)],查询组件和片段组件的编码格式应为“appli-
cation/x-www-form-urlencoded”(见RFC1867)编码格式。
5.3.2 授权端点
授权服务器上用于与资源拥有者交互的端点,用于接收第三方应用程序的授权请求、资源拥有者的
身份凭据和授权,以及返回授权许可给第三方应用程序。当授权服务器收到第三方应用程序的授权请
求时,授权服务器应首先验证资源拥有者的身份。授权服务器鉴别资源拥有者的方式(例如,用户名口
令登录,会话cookie)不属于本标准的讨论范围。
授权端点URI通常由授权服务器的服务文档提供。
授权端点的URI可包含查询组件。当增加其他查询参数时,应保留该查询组件,该端点URI不应
包含片段组件。
授权服务器的授权端点应支持HTTPGET方法 (见RFC2616),同时也可支持 HTTPPOST方
法(见RFC2616)。
5.3.3 令牌端点
第三方应用程序呈递授权许可或刷新令牌给授权服务器的令牌端点,授权服务器验证请求后,令牌
端点发放访问令牌给第三方应用程序。除隐式许可之外的其他授权方式中,都会用到令牌端点。
本标准不规定第三方应用程序获取令牌端点URI的方式(通常由授权服务器的服务文档提供)。
令牌端点URI可包含查询组件。当增加其他查询参数时,应保留该查询组件。令牌端点 URI不
应包含片段组件。
第三方应用程序在向授权服务器的令牌端点请求访问令牌时应使用POST方法。
当授权服务器的令牌端点收到有保密能力型的第三方应用程序或其他被授予了身份凭据的第三方
应用程序的请求时,授权服务器应对第三方应用程序进行身份鉴别。
5.3.4 重定向端点
5.3.4.1 概述
授权服务器完成与资源拥有者的交互之后,将资源拥有者的用户代理重定向到第三方应用程序的
重定向端点。
第三方应用程序在注册阶段或构造授权请求阶段确定其重定向端点URI。
重定向端点URI应是绝对路径URI(见RFC3986)。重定向端点URI可包含查询组件,在向重定
向端点URI添加其他查询参数时,该组件应被保留。重定向端点URI不应包含片段组件。
5.3.4.2 重定向端点安全要求
任何与重定向端点的通信应使用5.2要求的安全通信协议。如果5.2要求的安全协议不可用,授权
服务器在重定向之前,应当向资源拥有者发出此端点不安全的警告。
授权服务器应要求下列第三方应用程序在授权服务器上进行注册时(见6.3)登记其重定向端点:
a) 无保密能力的第三方应用程序(见6.1);
b) 采用隐式许可类型(见7.3)的有保密能力型的第三方应用程序。
授权服务器应要求所有类型的第三方应用程序在使用授权端点之前向授权服务器注册第三方应用
程序的重定向端点。
授权服务器应要求第三方应用程序提供完整的重定向端点 URI。如果第三方应用程序无法实现
注册完整的重定向端点URI,授权服务器应要求第三方应用程序注册方案、主机名和路径等三部分(在
第三方应用程序请求授权时只允许其变更重定向端点URI的查询组件)。
授权服务器允许第三方应用程序注册多个重定向端点。
如果第三方应用程序注册了多个重定向端点URI,或者只注册了重定向端点URI的一部分,或者
没有注册重定向端点URI,第三方应用程序在发送授权请求时,应在请求中使用参数来
标识该次请求所使用的重定向端点URI。
当授权请求中包含重定向端点URI时,如果第三方应用程序注册过重定向端点URI,授权服务器
应采用RFC3986第6节定义的比较和匹配方法,对收到的重定向端点URI和之前注册过的重定向端
点URI进行比较和匹配。如果第三方应用程序注册了完整的URI,则授权服务器应采用RFC3986第
6.2.1节定义的简单字符串比较方法对两个重定向端点URI进行比较。
如果授权请求由于重定向端点URI丢失、无效或者不匹配而未通过验证,授权服务器应告知资源
拥有者这一错误,并且不得自动将用户代理重定向到未通过验证的重定向端点URI。
发向第三方应用程序重定向端点的重定向请求通常会获得 HTML文档的响应,该响应由用户代
理处理。第三方应用程序不应在重定向请求的响应中包含任何第三方的脚本。第三方应用程序应从重
定向请求的URI中解析出凭据并将用户代理再次重定向到另外的端点,以避免在URI或其他地方暴
露凭据。
6 第三方应用程序及安全要求
6.1 第三方应用程序类型
根据第三方应用程序是否对其身份凭据具有保密能力,本标准定义了两种第三方应用程序的类型:
a) 有保密能力型
第三方应用程序有能力维持其凭据的机密性(例如,第三方应用程序运行在严格执行访问控制的安
全服务器上),从而可通过提供安全的身份凭据来证明自己身份的真实性,或者第三方应用程序有能力
通过其他的方式(本标准不作规定)证明自己身份的真实性。
b) 无保密能力型
第三方应用程序没有能力维持其凭据的机密性(例如,第三方应用程序运行在资源拥有者使用的设
备上,本地应用或是基于浏览器的应用等),无法提供安全的身份凭据来证明自己身份的真实性,并且没
有能力通过其他方式证明自己身份的真实性。
第三方应用程序类型的认定取决于授权服务器的鉴别安全要求和授权服务器对第三方应用程序凭
据暴露级别的接受程度(通常由授权服务器的服务文档提供)。授权服务器不应对第三方应用程序的类
型进行假定。
第三方应用程序可能由一组分布式的组件共同实现,每个组件具有不同的第三方应用程序类型和
安全上下文(例如,第三方应用程序同时具有基于服务器的有保密能力型组件和基于浏览器的无保密能
力的组件)。对此类第三方应用程序的注册超出本标准的讨论范围,通常第三方应用程序运营商可将第
三方应用程序的每个组件都注册在授权服务器上。
本标准主要涉及以下三种第三方应用程序实例:
---Web应用
Web应用是运行在一台 Web服务器上的有保密能力型第三方应用程序。资源拥有者通过
HTML用户界面来访问该应用,此 HTML用户界面由其使用的设备中的用户代理来渲染。
第三方应用程序身份凭据以及发放给第三方应用程序的所有访问令牌都存储在 Web服务器
上,对资源拥有者而言是不可获取且不可访问的。
---运行于用户代理上的应用
基于用户代理的应用是一类无保密能力型第三方应用程序,是从 Web服务器下载到资源拥有
者本地设备上、运行于用户代理(例如,Web浏览器)中的代码。协议数据和凭据对于资源拥
有者而言是可访问的。
---本地应用
本地应用是安装和运行在资源拥有者所使用的设备上的一类无保密能力型第三方应用程序。
协议数据和凭据对于资源拥有者而言是可访问的。本标准假定该应用中所包含的任何第三方
应用程序用于身份鉴别的凭据都可被提取出来。另一方面,动态发放的凭据(例如访问令牌和
刷新令牌)应受到保护,不应被与该应用交互的恶意服务器获得,也不应受到同一设备上其他
应用的威胁。
6.2 第三方应用程序标识符
第三方应用程序标识是授权服务器为注册的第三方应用程序发放的应用程序标识符。该标识符是
字符串,授权服务器使用该字符串可唯一标识一个第三方应用程序。
本标准对第三方应用程序标识符的长度不作规定。授权服务器应规定该标识符的长度,并对其发
放的任何长度的标识符进行详细记录。第三方应用程序不应对此标识的长度进行假定。
6.3 第三方应用程序注册要求
在协议进行之前,第三方应用程序的提供商需要在授权服务器上注册第三方应用程序的信息(例如
重定向端点URI、第三方应用程序类型等),建立第三方应用程序与授权服务器的信任关系。第三方应
用程序提供商应使用授权服务器支持的注册方法(通常由授权服务器的服务文档提供)完成注册过程,
具体注册方法不属于本标准的规定范围。
在注册第三方应用程序时,第三方应用程序提供商宜提供以下信息给授权服务器:
a) 第三方应用程序的类型(见6.1);
b) 指向第三方应用程序的重定向端点(见5.3.4);
c) 授权服务器所要求的其他信息(如,应用名称、网站和描述等)。
6.4 第三方应用程序身份鉴别
6.4.1 第三方应用程序鉴别方案
6.4.1.1 第三方应用程序口令凭据鉴别方案
当授权服务器使用基于口令凭据的鉴别方案对第三方应用程序进行鉴别时,授权服务器可使用
HTTP摘要访问鉴别方案(digestaccessauthenticationscheme,见RFC2617)。第三方应用程序对其
标识符、口令、授权服务器发送的nonce参数值(随机字符串,用于防止重放攻击)使用SM3算法(见
GB/T 32905-2016)进行杂凑运算后,再采用“application/x-www-form-urlencoded”(见RFC1867)编
码格式进行编码,将编码后的值放在HTTP请求的主体部分,以POST请求的方式发送给授权服务器
以进行身份鉴别。请求中包含如下参数:
a) [必选]
6.2中所描述的第三方应用程序标识符。
b) [必选]
第三方应用程序的口令。
本标准不推荐授权服务器使用口令对第三方应用程序进行鉴别。如果使用这种方案,第三方应用
程序的口令应放在请求主体部分中进行传输(即应采用POST方式),不能包含在请求的URI中(即不
应采用GET方式)。
授权服务器和第三方应用程序的交互应使用SSLVPN技术规范中规定的安全通信协议(见5.2)。
由于鉴别此类第三方应用程序的方法涉及口令,授权服务器应确保所有涉及口令的端点能够抵御
暴力攻击。
6.4.1.2 第三方应用程序数字证书鉴别方案
本标准推荐授权服务器使用基于SM2算法(见GB/T 32918.2-2016或GB/T 32918.4-201......
英文网页English: GM/T 0068-2019
相关标准: GB/T 15843.1|GM/T 0078|GM/T 0066|GM/T 0065|GM/T 0068-2019|GM/T 0068|