| RFC 9101 | OAuth JAR | 2021年8月 |
| Sakimura, et al. | 标准跟踪 | [页] |
RFC 6749 中描述的 OAuth 2.0 授权请求使用 查询参数序列化,这意味着授权请求 参数被编码在请求的 URI 中,并通过诸如 Web 浏览器 之类的用户代理发送。虽然这易于实现,但这意味着 a) 通过用户代理进行的通信未受完整性 保护,因此参数可能被污染,b) 通信来源未经过身份验证,并且 c) 通过用户代理进行的通信 可能被监视。由于这些弱点, 现在已经提出了针对该协议的若干攻击。¶
本文档引入了改为在 JSON Web Token (JWT) 中发送请求参数的能力,这允许使用 JSON Web Signature (JWS) 对请求进行签名,并使用 JSON Web Encryption (JWE) 对其加密,从而获得授权请求的完整性、 来源身份验证和机密性 属性。请求可以按值发送,也可以按引用发送。¶
这是一份互联网标准跟踪文档。¶
本文档是互联网工程任务组 (IETF) 的产物。它代表了 IETF 社区的共识。它已经 过公开审查,并已由互联网工程指导组 (IESG) 批准发布。有关 互联网标准的更多信息可在 RFC 7841 第 2 节中找到。¶
关于本文档当前状态、任何 勘误以及如何提供反馈的信息,可从 https://www.rfc-editor.org/info/rfc9101 获取。¶
Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
OAuth 2.0 [RFC6749] 中的授权请求 使用查询参数 序列化,并且通常通过诸如 Web 浏览器之类的用户代理发送。¶
例如,参数 response_type、client_id、state 和
redirect_uri 被编码在请求的 URI 中:¶
虽然这易于实现,但 URI 中的编码 不允许使用应用层安全性来 提供机密性和完整性保护。 虽然 TLS 用于在客户端和用户代理之间以及用户代理和 授权服务器之间提供通信安全性,但 TLS 会话在用户代理处终止。 此外,TLS 会话可能在某些中间盒 (例如负载均衡器)处过早终止。¶
由于这些固有弱点,已经发现了若干针对该 协议的攻击,例如重定向 URI 重写。¶
使用应用层安全性可以缓解这些问题。¶
使用应用层安全性允许请求由 受信任的第三方准备,从而客户端应用程序不能请求 超出先前约定范围的权限。¶
此外,通过引用传递请求可以减少线上传输开销。¶
参数 request 和 request_uri 被作为
OAuth 2.0 [RFC6749]
流程的附加授权请求参数引入。
request 参数
是一个 JSON Web Token (JWT) [RFC7519],其 JWT Claims
Set 保存 JSON 编码的 OAuth 2.0 授权请求参数。
注意,与 RFC 7519 不同,Claims Set 的元素是
已编码的 OAuth 请求参数 [IANA.OAuth.Parameters],
仅补充少量由 IANA 管理的 JSON Web Token Claims
[IANA.JWT.Claims],特别是 iss
和
aud。request 参数中的 JWT 使用 JWS 进行完整性
保护和来源身份验证。¶
JWT [RFC7519] 可以
通过引用传递给授权端点,
在这种情况下,使用参数 request_uri
而不是 request。¶
使用 JWT [RFC7519] 作为请求编码而不是查询 参数有若干优点:¶
有少数情况下,通过引用请求很有用,例如:¶
OpenID Connect [OpenID.Core] 正在使用此能力。¶
本文档中的关键词 "MUST"、"MUST NOT"、 "REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、 "RECOMMENDED"、"NOT RECOMMENDED"、 "MAY" 和 "OPTIONAL",当且仅当它们以全大写形式 出现时,应按 BCP 14 [RFC2119] [RFC8174] 中所述解释, 如此处所示。¶
就本规范而言,除了 OAuth 2.0 Framework [RFC6749]、 JSON Web Signature [RFC7515] 和 JSON Web Encryption [RFC7516] 中定义的内容之外,还适用以下术语和 定义。¶
请求对象是一个 JSON Web Token (JWT) [RFC7519],其 JWT Claims Set 保存 JSON 编码的 OAuth 2.0 授权请求 参数。¶
请求对象 URI 是一个绝对 URI,它引用组成
OAuth 2.0 授权请求的一组参数。该 URI 引用的资源的内容
是一个 请求
对象(第 2.1 节),除非该
URI 是由同一授权服务器提供给客户端的,在这种情况下,
其内容是由授权服务器自行决定的实现细节。内容为请求对象是为了确保在
request_uri 的提供者与使用者是不同
实体时的互操作性,例如客户端提供一个 URI,
该 URI 引用存储在客户端后端服务上的请求对象,
并可通过 HTTPS 访问。在后一种情况下,授权服务器
既是该 URI 的提供者又是使用者,例如它提供一个端点,
以请求对象换取 URI 时,这种互操作性顾虑并不适用。¶
客户端通过使用 application/x-www-form-urlencoded
格式将以下参数添加到授权端点 URI 的查询组件中,
来构造授权请求 URI:¶
request_uri。
保存 [RFC6749] 第 4 节(OAuth 2.0)中所述授权请求参数的
请求对象(第 2.1
节)。
如果此参数存在于授权请求中,
则 request_uri MUST NOT 存在。¶
request。
按 RFC 3986 [RFC3986] 定义的绝对 URI,即引用
[RFC6749] 第 4 节(OAuth
2.0)中所述授权请求
参数的 请求对象 URI(第
2.2 节)。
如果此参数存在于授权请求中,
则 request MUST NOT 存在。¶
client_id。该值 MUST 与
request 或 request_uri
请求对象的(第 2.1
节)
client_id 匹配。¶
客户端使用 HTTP 重定向响应,或通过用户代理可用的其他方式, 将资源所有者引导到所构造的 URI。¶
例如,客户端引导最终用户的用户代理发出 以下 HTTPS 请求:¶
为简洁起见,request 参数的值已缩写。¶
授权请求对象 MUST 为以下之一:¶
客户端 MAY 同时在查询参数中 发送请求对象中所包含参数的重复副本, 以便向后兼容等。 但是,支持本规范的授权服务器 MUST 只使用请求对象中包含的参数。¶
客户端将授权请求作为
请求对象发送到授权端点,作为
request 参数值。¶
以下是使用 request
参数的
授权请求示例
(值中的换行仅用于显示目的):¶
https://server.example.com/authorize?client_id=s6BhdRkqt3&
request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6
ICJzNkJoZFJrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBs
ZS5jb20iLAogICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAg
ICAiY2xpZW50X2lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6
ICJodHRwczovL2NsaWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAi
b3BlbmlkIiwKICAgICJzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2Ui
OiAibi0wUzZfV3pBMk1qIiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VU
ElVaPjqW_ToI1yrEJ67BgKb5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC
0iQJwXu5YVY-vnW0_PLJb1C2HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKz
uKzqSb1wAZALo5f89B_p6QA6j6JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3E
YLYaCb4ik4I1zGXE4fvim9FIMs8OCMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W
9typPf846lGwA8h9G9oNTIuX8Ft2jfpnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3
j1i7tLR_5Nz-g
¶
request_uri 授权请求参数使得
OAuth 授权请求能够按引用而不是
按值传递。此参数的使用方式与
request 参数相同,只是请求对象值
从指定 URI 所标识的资源中取得,
而不是按值传递。¶
整个请求 URI SHOULD NOT 超过 512 个 ASCII 字符。 这一限制有两个原因:¶
request_uri 引用的资源内容
MUST 是请求对象,并且 MUST
可由授权服务器访问,
除非该 URI 是由授权服务器提供给客户端的。
在第一种情况下,request_uri MUST 是
https URI,
如 [RFC7230] 第 2.7.2 节 所规定。
在第二种情况下,它 MUST 是 URN,
如 [RFC8141] 所规定。¶
以下是
可由 request_uri 引用的
请求对象资源内容示例
(值中的换行仅用于显示目的):¶
eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ewogICAgImlzcyI6ICJzNkJoZF JrcXQzIiwKICAgICJhdWQiOiAiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLAog ICAgInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsCiAgICAiY2xpZW50X2 lkIjogInM2QmhkUmtxdDMiLAogICAgInJlZGlyZWN0X3VyaSI6ICJodHRwczovL2Ns aWVudC5leGFtcGxlLm9yZy9jYiIsCiAgICAic2NvcGUiOiAib3BlbmlkIiwKICAgIC JzdGF0ZSI6ICJhZjBpZmpzbGRraiIsCiAgICAibm9uY2UiOiAibi0wUzZfV3pBMk1q IiwKICAgICJtYXhfYWdlIjogODY0MDAKfQ.Nsxa_18VUElVaPjqW_ToI1yrEJ67BgK b5xsuZRVqzGkfKrOIX7BCx0biSxYGmjK9KJPctH1OC0iQJwXu5YVY-vnW0_PLJb1C2 HG-ztVzcnKZC2gE4i0vgQcpkUOCpW3SEYXnyWnKzuKzqSb1wAZALo5f89B_p6QA6j6 JwBSRvdVsDPdulW8lKxGTbH82czCaQ50rLAg3EYLYaCb4ik4I1zGXE4fvim9FIMs8O CMmzwIB5S-ujFfzwFjoyuPEV4hJnoVUmXR_W9typPf846lGwA8h9G9oNTIuX8Ft2jf pnZdFmLg3_wr3Wa5q3a-lfbgF3S9H_8nN3j1i7tLR_5Nz-g¶
客户端将请求对象资源存储在本地或远程某个
授权服务器可以访问的 URI 处。
这样的设施可以由授权服务器
或受信任的第三方提供。例如,授权服务器可以
提供一个 URL,客户端向其 POST 请求对象并
获得请求 URI。
此 URI 即请求对象 URI,request_uri。¶
请求对象可能包含只应
向授权服务器披露的值。
因此,request_uri MUST 在其生命周期内
具有适当熵,
以便在可公开检索时该 URI 不可猜测。
有关指导,请参见
[RFC6819] 第 5.1.4.2.2
节 和
"Capability URL 的良好实践" [CapURLs]。
RECOMMENDED 在合理超时后移除 request_uri,
除非采取了访问控制措施。¶
以下是 请求对象 URI 值的示例 (值中的换行仅用于显示目的)。 在此示例中,受信任的第三方服务托管该请求对象。¶
https://tfp.example.org/request.jwt/
GkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM
¶
客户端将授权请求发送到 授权端点。¶
以下是
使用 request_uri 参数的授权请求示例
(值中的换行仅用于显示目的):¶
https://server.example.com/authorize?
client_id=s6BhdRkqt3
&request_uri=https%3A%2F%2Ftfp.example.org%2Frequest.jwt
%2FGkurKxf5T0Y-mnPFCHqWOMiZi4VS138cQO_V7PZHAdM
¶
如果请求对象已加密, 授权服务器 MUST 按照 JSON Web Encryption [RFC7516] 规范解密 JWT。¶
结果是一个已签名的请求对象。¶
如果解密失败,授权服务器 MUST
在响应授权请求时向客户端返回
invalid_request_object 错误。¶
授权服务器 MUST 验证
JWS 签名的 [RFC7515] 请求
对象的签名。如果存在 kid Header Parameter,则所标识的密钥
MUST 是所使用的密钥,并且 MUST 是
与客户端关联的密钥。签名 MUST
使用与客户端关联的密钥以及
alg Header Parameter 中指定的算法进行验证。算法验证 MUST 按照
[RFC8725] 第 3.1 节和第 3.2 节中的规定执行。¶
如果密钥未与客户端关联,或者签名
验证失败,授权服务器 MUST
在响应授权请求时向客户端返回
invalid_request_object 错误。¶
授权服务器响应按照 [RFC6749] 第 4 节(OAuth 2.0)中的方式创建并发送给客户端。¶
此外,本文档使用这些附加错误值:¶
request_uri
返回错误或包含无效数据。¶
request 参数。¶
request_uri 参数。¶
支持请求对象 URI 方法的客户端实现 MUST 支持 TLS,并遵循 "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)" [RFC7525]。¶
为了防止信息披露和篡改, MUST 使用具有 机密性和完整性保护的密码套件的 TLS 来应用机密性保护。¶
HTTP 客户端 MUST 还使用 DNS-ID [RFC6125] 验证 TLS 服务器证书,以避免中间人攻击。 此处适用 [RFC6125] 中定义的规则和指南,并包含以下 考虑事项:¶
*。¶
由于请求对象是 JWT,核心 JWT claims 不能 在请求对象中用于 JWT 所规定内容之外的任何目的。 因此,它们已被注册为 OAuth 授权请求参数,以避免未来的 OAuth 扩展 以不同含义使用它们。¶
本规范向 [RFC6749] 建立的 "OAuth Parameters" 注册表 [IANA.OAuth.Parameters] 添加以下值。¶
本规范向 [RFC8414] 建立的 "OAuth Authorization Server Metadata" 注册表 [IANA.OAuth.Parameters] 添加以下值。¶
本规范向 [RFC7591] 建立的 "OAuth Dynamic Client Registration Metadata" 注册表 [IANA.OAuth.Parameters] 添加以下值。¶
本节按照 [RFC6838] 中描述的方式,
在 "Media
Types" 注册表 [IANA.MediaTypes] 中
注册
application/oauth-authz-req+jwt
媒体类型 [RFC2046]。它可用于
指示内容是包含请求
对象 claims 的 JWT。¶
.)字符分隔。¶
除了 OAuth 2.0 中讨论的所有安全 考虑事项 [RFC6819] 之外, 还需要考虑 [RFC7515]、[RFC7516]、 [RFC7518] 和 [RFC8725] 中的安全 考虑事项。此外,还有若干学术论文,例如 [BASIN],它们为 OAuth 之类协议的安全 属性提供了有用见解。¶
考虑到上述内容,本文档建议将 以下安全考虑事项纳入考虑。¶
通过
request 参数发送授权请求对象时,它 MUST
使用 JWS [RFC7515]
签名,或者分别使用 JWS [RFC7515] 和
JWE [RFC7516]
先签名后加密,
并使用当时认为适当的算法。¶
授权请求的来源 MUST 始终被 验证。有几种方法可以做到这一点:¶
尽管本规范并不要求它们, 但诸如 [BASIN] 之类的研究指出, 一项良好实践是以防篡改的 方式显式说明预期的交互端点和 消息在序列中的位置,从而使发起者的意图明确无歧义。本 规范 RECOMMENDED 将此 实践用于 [RFC6749]、[RFC6750] 和 [RFC8414] 中定义的以下端点:¶
protected_resources)¶
authorization_endpoint)¶
redirect_uri)¶
token_endpoint)¶
此外,如果使用动态发现,则此实践也适用于 发现相关端点。¶
在 [RFC6749] 中, 虽然重定向 URI 包含在授权请求中,但其他端点 不包含。因此,同样的情况也适用于授权 请求对象。¶
引入 request_uri
会带来若干攻击可能性。
有关与 URI 相关
风险的更多信息,请查阅
[RFC3986] 第 7 节。¶
一组恶意客户端可以通过将
request_uri 指向一个
返回极大内容或响应极慢的 URI,
对授权服务器发起 DoS 攻击。
在这种攻击下,服务器可能耗尽其资源
并开始失败。¶
类似地,恶意客户端可以指定一个
request_uri 值,
该值本身指向一个使用 request_uri 的授权请求 URI,
从而导致递归查找。¶
为防止此类攻击成功,服务器应当
a) 检查 request_uri
参数的值未指向意外位置,
b) 检查响应的媒体类型是
application/oauth-authz-req+jwt,
c) 对获取
request_uri 内容实现超时,并且
d) 不对
request_uri 执行递归 GET。¶
request_uri 的值未被签名;
因此,它可能被浏览器中的中间人攻击者篡改。
因此会出现若干攻击可能性。例如,
a) 攻击者可以创建重写后的
URI 指向的另一个文件,从而使请求额外 scope 成为可能,或者
b) 攻击者可以通过将 request_uri
的值设置为受害者的值,
对受害者站点发起 DoS 攻击。¶
为防止此类攻击成功,服务器应当
a) 检查 request_uri
参数的值未指向意外位置,
b) 检查响应的媒体类型是
application/oauth-authz-req+jwt,并且
c) 对获取
request_uri 的内容实现超时。¶
除非客户端和服务器使用的协议被锁定为 使用 OAuth JWT 保护的授权请求(JAR),否则 攻击者可能使用 RFC 6749 请求 绕过本规范提供的所有保护。¶
为防止这种攻击,本规范定义了新的
客户端元数据和服务器元数据值,二者均命名为
require_signed_request_object,其值均为
布尔值。¶
当其作为客户端元数据的值为 true 时,
服务器 MUST 拒绝来自
客户端且不符合本规范的授权请求。如果请求对象
在此服务器元数据值为 true 时使用
alg 值 none,它
MUST 也拒绝该请求。如果省略,则默认值为
false。¶
当其作为服务器元数据的值为 true 时,
服务器 MUST 拒绝来自
任何不符合本规范的客户端的授权请求。如果请求对象
使用 alg 值 none,它
MUST 也拒绝该请求。如果省略,
默认值为 false。¶
注意,即使不存在 require_signed_request_object 元数据
值,客户端 MAY 也可以使用已签名的请求对象,
前提是客户端和服务器共同支持签名算法。
签名算法元数据的使用在第 4 节中描述。¶
当前安全 考虑事项可见于 "Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)" [RFC7525]。这 取代了 OAuth 2.0 [RFC6749] 中的 TLS 版本建议。¶
鉴于 OAuth 参数值会在两个不同位置发送,
即作为普通 OAuth 参数和作为请求对象 claims,
实现必须防范可能使用不匹配
参数值来获得非预期结果的攻击。
这就是两个客户端 ID 值 MUST 匹配的原因,
也是只使用请求对象中的参数值的原因,
以及 request 和
request_uri 都不能出现在请求对象中的原因。¶
如 [RFC8725] 第 2.8 节 所述, 攻击者可能试图在某个 JWT 并非为其设计的上下文中使用该 JWT。 针对这些攻击描述的缓解措施可以应用于请求对象。¶
攻击者可能试图重新利用请求对象的一种方式,
是尝试将其用作客户端身份验证 JWT,
如 [RFC7523] 第 2.2 节 所述。
防止这种情况的一种简单方式是永远不要在请求对象中
将客户端 ID 用作 sub 值。¶
防止跨 JWT 混淆的另一种方式是使用显式类型,
如 [RFC8725] 第 3.11 节 所述。
可以通过包含值为
oauth-authz-req+jwt 的
typ Header Parameter,
来显式地为请求对象指定类型
(该值已在第 9.4.1 节中注册)。
但请注意,在现有授权服务器上要求显式类型化请求对象
会破坏大多数现有部署,
因为现有客户端已经普遍使用无类型请求对象,
特别是在 OpenID Connect [OpenID.Core] 中。
但是,对于无需考虑与现有部署兼容性的
新 OAuth 部署配置文件,要求显式类型化会是一个好主意。¶
最后,防止跨 JWT 混淆的另一种方式是使用一种密钥 管理机制,其中用于签名请求对象的密钥 可以明确区别于用于其他目的的密钥。这样,如果 对手试图在另一上下文中重新利用请求对象,就会发生密钥 不匹配,从而挫败攻击。¶
当客户端被授予访问包含个人数据的受保护资源的权限时, 客户端 和授权服务器都需要遵守 隐私原则。 "Privacy Considerations for Internet Protocols" [RFC6973] 为协议设计和实现的 改进提供了极佳指导。 应当遵循其中列出的规定。¶
大多数规定都适用于 "The OAuth 2.0 Authorization Framework" [RFC6749] 和 "The OAuth 2.0 Authorization Framework: Bearer Token Usage" [RFC6750], 并非本规范所特有。 下文仅指出 本规范特有的规定。¶
当客户端被授予访问包含个人数据的受保护资源的权限时, 客户端 SHOULD 将 个人数据收集限制在适用法律范围内,并且严格限于指定目的所必要的内容。¶
用户通常很难确定所请求的个人数据 是否严格必要。受信任的第三方服务可以通过 审查客户端请求、将其与客户端拟议的 处理进行比较,并对该请求进行认证,从而帮助 用户。认证后,客户端在发出授权请求时,可以 向受信任的第三方服务提交授权请求,以 获得请求对象 URI。此过程包含两个步骤:¶
request_uri。¶
request_uri。受信任的第三方服务
还会验证请求对象与客户端根据前一步
有资格获得的 claims 保持一致。¶
在授权请求中收到这样的请求对象 URI 后,
授权服务器首先验证
请求对象 URI 的 authority 部分是否为受信任第三方
服务的合法 authority。然后,授权服务器向
请求对象 URI 发出 HTTP GET 请求。连接时,授权服务器
MUST 验证 TLS 证书中表示的服务器身份
对该请求对象 URI 是合法的。随后,
授权服务器可以获得请求对象,其中包括代表客户端的
client_id。¶
同意屏幕 MUST 指示客户端,并且 SHOULD 指示该请求已由 受信任的第三方服务审查,符合收集 限制原则。¶
本规范允许扩展参数。 这些参数可能包含潜在敏感信息。 由于 URI 查询参数可能通过各种 方式泄露,最显著的是通过 referrer 和浏览器历史记录泄露, 因此,如果授权请求包含潜在敏感 参数,客户端 SHOULD 使用 JWE [RFC7516] 加密 请求对象。¶
在使用请求对象 URI 方法的情况下,如果请求
对象包含个人身份信息或敏感信息,
request_uri SHOULD 仅使用一次
并具有较短有效期,并且它 MUST 具有
适用于相关安全策略的足够熵,除非
请求对象本身使用 JWE
[RFC7516] 加密。请求对象 URI 的
有效期的适当短度和熵取决于
基于受保护资源价值的风险
计算。对有效时间的一般指导是少于
一分钟,并且在撰写本规范时,请求对象 URI 应包含
128 位或更多的密码学随机值。¶
即使受保护资源不包含 个人身份信息, 如果使用持久的静态按用户 请求对象 URI,有时也可能通过请求对象 URI 识别用户。 第三方可能通过浏览器历史记录等观察到 它,并开始使用它关联 用户的活动。 在某种意义上,这也是一种数据披露, 应当避免。¶
因此,应避免使用按用户持久的请求对象 URI。 一次性请求对象 URI 是一种替代方案。¶
以下人员在 OAuth 工作组和其他 IETF 角色中 为本文档的创建做出了贡献。 (使用的是贡献时的隶属关系。)¶
Annabelle Backman (Amazon), Dirk Balfanz (Google), Sergey Beryozkin, Ben Campbell (as AD), Brian Campbell (Ping Identity), Roman Danyliw (as AD), Martin Duke (as AD), Vladimir Dzhuvinov (Connect2id), Lars Eggert (as AD), Joel Halpern (as GENART), Benjamin Kaduk (as AD), Stephen Kent (as SECDIR), Murray Kucherawy (as AD), Warren Kumari (as OPSDIR), Watson Ladd (as SECDIR), Torsten Lodderstedt (yes.com), Jim Manico, James H. Manger (Telstra), Kathleen Moriarty (as AD), Axel Nennker (Deutsche Telecom), John Panzer (Google), Francesca Palombini (as AD), David Recordon (Facebook), Marius Scurtescu (Google), Luke Shepard (Facebook), Filip Skokan (Auth0), Hannes Tschofenig (ARM), Éric Vyncke (as AD), and Robert Wilton (as AD).¶
以下人员通过 OpenID Connect Core 1.0 [OpenID.Core] 为本文档的创建做出了贡献。¶
Brian Campbell (Ping Identity), George Fletcher (AOL), Ryo Itou (Mixi), Edmund Jay (Illumila), Breno de Medeiros (Google), Hideki Nara (TACT), and Justin Richer (MITRE).¶