标准搜索结果: 'GM/T 0068-2019'
标准编号 | GM/T 0068-2019 (GM/T0068-2019) | 中文名称 | 开放的第三方资源授权协议框架 | 英文名称 | Open third party resource authorization protocol framework | 行业 | Chinese Industry Standard (推荐) | 中标分类 | L80 | 国际标准分类 | 35.040 | 字数估计 | 29,212 | 发布日期 | 2019 | 实施日期 | 2019-07-12 |
GM/T 0068-2019
Open third party resource authorization protocol framework
ICS 35.040
L80
中华人民共和国密码行业标准
开放的第三方资源授权协议框架
2019-07-12发布
2019-07-12实施
国家密码管理局 发 布
目次
前言 Ⅲ
引言 Ⅳ
1 范围 1
2 规范性引用文件 1
3 术语和定义 1
4 缩略语 2
5 概述 3
5.1 协议流程 3
5.2 协议通道要求 4
5.3 协议端点 4
6 第三方应用程序及安全要求 6
6.1 第三方应用程序类型 6
6.2 第三方应用程序标识符 7
6.3 第三方应用程序注册要求 7
6.4 第三方应用程序身份鉴别 7
7 授权流程 8
7.1 授权许可 8
7.2 授权码许可流程 9
7.3 隐式许可流程 12
7.4 资源拥有者口令凭据许可流程 15
7.5 第三方应用程序身份凭据许可流程 17
8 令牌 18
8.1 令牌类型 18
8.2 访问令牌发放 20
8.3 访问令牌刷新 21
9 受保护资源访问 21
9.1 受保护资源访问流程 21
9.2 成功响应 22
9.3 出错响应 22
附录A(资料性附录) 协议参数说明 23
参考文献 25
前言
本标准按照GB/T 1.1-2009给出的规则起草。
本标准参考国际互联网工程任务组进行制定。按照我国相关密码政策和法规,结合
我国实际应用需求及产品生产厂商的实践经验,本标准在第三方应用程序身份鉴别部分增加了基于
SM2国产密码算法的数字证书鉴别方法,在授权协议中的数据通信安全部分采用密码行业标准GM/T
0024-2014《SSL VPN 技术规范》中定义的安全通信协议取代TLS协议,在访问令牌的保护部分增
加了采用SM2、SM3、SM4等国家密码管理局认可的算法对其进行签名和加密的规定。另外,本标准去
除了RFC6749文件中的安全考虑部分,将安全考虑部分涉及的应采用的安全措施具体化到本标准的各
个章条,包括协议中传输的消息、端点、发放的令牌、第三方应用程序身份鉴别等部分。
本标准由密码行业标准化技术委员会提出并归口。
本标准的主要起草单位:中国科学院数据与通信保护研究教育中心、北京数字认证股份有限公司、
中国科学院软件研究所、中国电子技术标准化研究院、北京信安世纪科技股份有限公司、普华诚信信息
技术有限公司。
本标准主要起草人:刘丽敏、李敏、王鑫、江伟玉、高能、刘宗斌、荆继武、林雪焰、张立武、汪宗斌、
彭佳、屠晨阳、刘泽艺、钱文飞、范科峰、郝春亮、梁佐泉。
引 言
在提供了资源互访接口的开放信息系统中,利用 Web、桌面、手机或其他智能设备应用程序实现互
联已成为常态。为了实现信息资源共享、业务合作,用户可利用某个安全域中的应用程序(被称为第三
方应用程序)访问另一个安全域中受保护的资源。为了确保受保护的资源只被资源拥有者许可的实体
访问,需要对实体进行鉴别与授权。然而,在传统的授权模型中,资源拥有者通常需要将其身份凭证共
享给访问者,这种方式带来了诸多安全隐患。本标准引入授权层,将第三方应用程序与资源拥有者的角
色进行分离,在资源拥有者的授权下,授权实体向第三方应用程序发放不同于身份凭据的令牌方式,实
现开放的第三方资源授权。
开放的第三方资源授权协议框架
1 范围
本标准规定了第三方资源授权协议的流程、不同类型的授权许可、协议各端点的功能要求以及系统
实体之间传递消息的格式和参数要求等。
本标准适用于在互联网跨安全域应用场景中,身份鉴别与授权服务的开发、测试、评估和采购。
2 规范性引用文件
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文
件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T 15843.3-2008 信息技术 安全技术 实体鉴别 第3部分:采用数字签名技术的机制
GB/T 32905-2016 信息安全技术 SM3密码杂凑算法
GB/T 32907-2016 信息安全技术 SM4分组密码算法
GB/T 32918.2-2016 信息安全技术 SM2椭圆曲线公钥密码算法 第2部分:数字签名算法
GB/T 32918.4-2016 信息安全技术 SM2椭圆曲线公钥密码算法 第4部分:公钥加密算法
GM/T 0024-2014 SSL VPN技术规范
3 术语和定义
下列术语和定义适用于本文件。
3.1
访问令牌
授权服务器发放的令牌,用于证明某实体具有访问特定范围内受保护资源的权限。
3.2
授权
授予访问者访问受保护资源的权限。
3.3
授权码
授权服务器发放给第三方应用程序的凭据,表明资源拥有者同意第三方应用程序访问受保护资源,
第三方应用程序可使用授权码获取访问令牌和刷新令牌。
3.4
授权端点
授权服务器上用于与资源拥有者交互的端点,用于接收资源拥有者的身份凭据和授权,以及返回授
权许可给第三方应用程序。
3.5
授权许可
授权服务器发放给第三方应用程序的凭据,表明资源拥有者同意第三方应用程序访问受保护资源。
第三方应用程序不应使用该凭据直接访问受保护资源,应使用该凭据从授权服务器换取访问令牌。
5 概述
5.1 协议流程
本标准定义的基本协议流程如图1所示。
图1 OAuth基本协议流程图
图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定义的安全传输层协议进行传输。授权服务器
应与第三方应用程序进行双向鉴别。由于< state >和< scope >参数(见7.2.2)可能通过不安全信道传输,
或被存储于不安全环境,因此,它们不应以明文形式包含第三方应用程序或资源拥有者的敏感信息。
5.3 协议端点
5.3.1 协议端点类型
授权过程使用了两个授权服务器上的端点:
a) 授权端点;
b) 令牌端点。
以及一个第三方应用程序的端点:重定向端点。
并非每一类授权许可类型的授权流程都使用了以上三种端点。
授权端点和令牌端点允许第三方应用程序在请求中添加< scope >参数,用该参数指明资源访问请求
中请求的受保护资源访问范围。相应地,授权服务器通过在响应中包含< scope >参数来告知第三方应用
程序其被发放的访问令牌的受保护资源访问范围。
< scope >参数的值以一组由空格分隔的大小写敏感的字符串表示,字符串的顺序不影响解析(“ab”
等价于“ba”)。< scope >参数所包含字符串的含义由授权服务器定义,通常由授权服务器的服务文档提供。
根据授权服务器的策略或者是资源拥有者的参与,授权服务器可全部或部分地拒绝第三方应用程
序所请求的受保护资源访问范围。如果所发放的访问令牌的受保护资源访问范围与第三方应用程序所
请求的不同,授权服务器应在响应中包含< scope >参数,以告知第三方应用程序其实际被允许的受保护
资源访问范围。
如果第三方应用程序在请求授权时省略了< scope >参数,授权服务器应使用预定义的默认值回应此
请求,或者拒绝此请求。授权服务器应在其服务文档中对< scope >参数的要求和默认值进行说明。
端点使用 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,第三方应用程序在发送授权请求时,应在请求中使用< redirect_uri >参数来
标识该次请求所使用的重定向端点URI。
当授权请求中包含重定向端点URI时,如果第三方应用程序注册过重定向端点URI,授权服务器
应采用RFC3986第6节定义的比较和匹配方法,对收到的重定向端点URI和之前注册过的重定向端
点URI进行比较和匹配。如果第三方应用程序注册了完整的URI,则授权服务器应采用RFC3986第
6.2.1节定义的简单字符串比较方法对两个重定向端点URI进行比较。
如果授权请求由于重定向端点URI丢失、无效或者不匹配而未通过验证,授权服务器应告知资源
拥有者这一错误,并且不得自动将用户代理重定向到未通过验证的重定向端点URI。
发向第三方应用程序重定向端点的重定向请求通常会获得 HTML文档的响应,该响应由用户代
理处理。第三方应用程序不应在重定向请求的响应中包含任何第三方的脚本。第三方应用程序应从重
定向请求的URI中解析出凭据并将用户代理再次重定向到另外的端点,以避免在URI或其他地方暴露凭据。
6 第三方应用程序及安全要求
6.1 第三方应用程序类型
根据第三方应用程序是否对其身份凭据具有保密能力,本标准定义了两种第三方应用程序的类型:
a) 有保密能力型
第三方应用程序有能力维持其凭据的机密性(例如,第三方应用程序运行在严格执行访问控制的安
全服务器上),从而可通过提供安全的身份凭据来证明自己身份的真实性,或者第三方应用程序有能力
通过其他的方式(本标准不作规定)证明自己身份的真实性。
b) 无保密能力型
第三方应用程序没有能力维持其凭据的机密性(例如,第三方应用程序运行在资源拥有者使用的设
备上,本地应用或是基于浏览器的应用等),无法提供安全的身份凭据来证明自己身份的真实性,并且没
有能力通过其他方式证明自己身份的真实性。
第三方应用程序类型的认定取决于授权服务器的鉴别安全要求和授权服务器对第三方应用程序凭
据暴露级别的接受程度(通常由授权服务器的服务文档提供)。授权服务器不应对第三方应用程序的类
型进行假定。
第三方应用程序可能由一组分布式的组件共同实现,每个组件具有不同的第三方应用程序类型和
安全上下文(例如,第三方应用程序同时具有基于服务器的有保密能力型组件和基于浏览器的无保密能
力的组件)。对此类第三方应用程序的注册超出本标准的讨论范围,通常第三方应用程序运营商可将第
三方应用程序的每个组件都注册在授权服务器上。
6.2 第三方应用程序标识符
第三方应用程序标识是授权服务器为注册的第三方应用程序发放的应用程序标识符。该标识符是
字符串,授权服务器使用该字符串可唯一标识一个第三方应用程序。
本标准对第三方应用程序标识符的长度不作规定。授权服务器应规定该标识符的长度,并对其发
放的任何长度的标识符进行详细记录。第三方应用程序不应对此标识的长度进行假定。
6.3 第三方应用程序注册要求
在协议进行之前,第三方应用程序的提供商需要在授权服务器上注册第三方应用程序的信息(例如
重定向端点URI、第三方应用程序类型等),建立第三方应用程序与授权服务器的信任关系。第三方应
用程序提供商应使用授权服务器支持的注册方法(通常由授权服务器的服务文档提供)完成注册过程,
具体注册方法不属于本标准的规定范围。
在注册第三方应用程序时,第三方应用程序提供商宜提供以下信息给授权服务器:
a) 第三方应用程序的类型(见6.1);
b) 指向第三方应用程序的重定向端点(见5.3.4);
c) 授权服务器所要求的其他信息(如,应用名称、网站和描述等)。
6.4 第三方应用程序身份鉴别
6.4.1 第三方应用程序鉴别方案
6.4.1.1 第三方应用程序口令凭据鉴别方案
当授权服务器使用基于口令凭据的鉴别方案对第三方应用程序进行鉴别时,授权服务器可使用
HTTP摘要访问鉴别方案。第三方应用程序对其
标识符、口令、授权服务器发送的nonce参数值(随机字符串,用于防止重放攻击)使用SM3算法(见
GB/T 32905-2016)进行杂凑运算后,再采用“application/x-www-form-urlencoded”(见RFC1867)编
码格式进行编码,将编码后的值放在HTTP请求的主体部分,以POST请求的方式发送给授权服务器
以进行身份鉴别。请求中包含如下参数:
a) < client_id >[必选]
6.2中所描述的第三方应用程序标识符。
b) < client_secret >[必选]
第三方应用程序的口令。
本标准不推荐授权服务器使用口令对第三方应用程序进行鉴别。如果使用这种方案,第三方应用
程序的口令应放在请求主体部分中进行传输(即应采用POST方式),不能包含在请求的URI中(即不
应采用GET方式)。
授权服务器和第三方应用程序的交互应使用SSLVPN技术规范中规定的安全通信协议(见5.2)。
由于鉴别此类第三方应用程序的方法涉及口令,授权服务器应确保所有涉及口令的端点能够抵御
暴力攻击。
6.4.1.2 第三方应用程序数字证书鉴别方案
本标准推荐授权服务器使用基于SM2算法(见GB/T 32918.2-2016或GB/T 32918.4-2016)的
数字证书鉴别方案对第三方应用程序进行鉴别,推荐采用GB/T 15843.3中规范的相关鉴别方案。
对于访问安全要求较高的数据资源时,应使用基于SM2算法的数字证书鉴别方案。
6.4.1.3 其他鉴别方案
授权服务器可支持任何符合其安全要求的鉴别方案。当采用其他鉴别方案时,授权服务器应记录
第三方应用程序标识符所对应的鉴别方案。
6.4.2 鉴别安全要求
有保密能力型的第三方应用程序和授权服务器之间应确立一种满足授权服务器安全要求(通常由
授权服务器的服务文档提供)的身份鉴别方法,使得授权服务器可以安全地对第三方应用程序的身份进
行鉴别。授权服务器通常在有保密能力型第三方应用程序注册时,授予第三方应用程序身份凭据(例如
口令、数字证书),通过基于口令凭据或数字证书的鉴别方案对第三方应用程序进行身份鉴别。有保密
能力型的第三方应用程序应确保其身份凭据的机密性。
无保密能力型的第三方应用程序可与授权服务器协商身份鉴别方法,但由于无保密能力型第三方
应用无法保证凭据的机密性,授权服务器不能仅依赖该方法对第三方应用程序身份的真实性进行判定。
授权服务器不应发放第三方应用程序身份凭据给无保密能力型的第三方应用程序。但特殊设备上
的本地应用如果具有对身份凭据的保密能力,授权服务器可发放第三方应用程序身份凭据给该类第三
方应用程序。
为了防止假冒的第三方应用程序,授权服务器应对第三方应用程序的身份进行鉴别。当第三方应
用程序身份鉴别流程无法实施时,授权服务器应采用其他方式来验证第三方应用......
|