在 OpenID Connect 中,当 "code" 流更安全地做同样的事情时,"code id_token" 混合工作流的目的是什么?
In OpenID Connect, what's the purpose of "code id_token" hybrid workflow when "code" flow does the same thing more securely?
在使用 OpenID Connect/OAuth2 参加 ASP.NET 身份安全课程时,我了解了不同工作流程的差异和 pro/cons。
具体来说,我对 code id_token
混合工作流程的目的感到困惑,它就像授权代码工作流程一样,除了它还 returns 一个(简化的)id_token
来自前方频道
所以我的第一个问题是,如果以后要通过后台通道再次检索完整的 id 令牌和访问令牌,那么浇水的目的是什么? -down id_token
首先由第一个(不太安全的)请求返回?
另一件事是关于安全性的:课程讲师提到即使没有 PKCE 保护,使用 code id_token
的混合工作流也被认为是安全的,原因有二:
- 初始
id_token
包含一个 c_hash
值,将其绑定到授权码,保护它免受授权码 leak/replay 攻击
我的问题: 由于初始 id_token
以完全相同的方式与授权代码一起返回,如果授权代码被泄露,我们不应该假设id_token
也遭到破坏,使此保护失效?
nonce
字符串确保一次性使用授权码
我的问题: 由于 nonce
作为纯文本包含在 URL 中,如果攻击者设法 post 重定向响应到合法用户之前的客户端,连同授权码,攻击就成功了吧?
鉴于这些,说具有 PKCE 保护(加上随机数)的授权代码工作流比没有 PKCE 的 code id_token
混合工作流更安全是否正确?
谢谢。
Hybrid Flow 的用例适用于前端和后端需要不同令牌的 Web 客户端:
- Web 前端收到 id 令牌并可以读取其声明
- 只有web后端接收访问+刷新令牌,然后向web前端发出auth cookie
混合流动特性
使用 code id_token 响应类型重定向,并在查询字符串中接收返回的 id 令牌以及授权代码。为防止替换攻击,您在重定向期间提供 nonce 值,然后验证响应中是否存在与 id 令牌声明 相同的值。
安全
就安全性而言,我认为它并不比 PKCE 差,因为它的安全性经过适当考虑并包含在 Open Id Connect Specification。
混合使用
如果您需要上述行为,则只能使用混合流程。它不是最常用的流,因为在使用身份验证 cookie 的 Web 应用程序中,前端无论如何都可以很容易地通过其后端获取用户信息,而后端又可以调用用户信息端点。
在使用 OpenID Connect/OAuth2 参加 ASP.NET 身份安全课程时,我了解了不同工作流程的差异和 pro/cons。
具体来说,我对 code id_token
混合工作流程的目的感到困惑,它就像授权代码工作流程一样,除了它还 returns 一个(简化的)id_token
来自前方频道
所以我的第一个问题是,如果以后要通过后台通道再次检索完整的 id 令牌和访问令牌,那么浇水的目的是什么? -down id_token
首先由第一个(不太安全的)请求返回?
另一件事是关于安全性的:课程讲师提到即使没有 PKCE 保护,使用 code id_token
的混合工作流也被认为是安全的,原因有二:
- 初始
id_token
包含一个c_hash
值,将其绑定到授权码,保护它免受授权码 leak/replay 攻击
我的问题: 由于初始 id_token
以完全相同的方式与授权代码一起返回,如果授权代码被泄露,我们不应该假设id_token
也遭到破坏,使此保护失效?
nonce
字符串确保一次性使用授权码
我的问题: 由于 nonce
作为纯文本包含在 URL 中,如果攻击者设法 post 重定向响应到合法用户之前的客户端,连同授权码,攻击就成功了吧?
鉴于这些,说具有 PKCE 保护(加上随机数)的授权代码工作流比没有 PKCE 的 code id_token
混合工作流更安全是否正确?
谢谢。
Hybrid Flow 的用例适用于前端和后端需要不同令牌的 Web 客户端:
- Web 前端收到 id 令牌并可以读取其声明
- 只有web后端接收访问+刷新令牌,然后向web前端发出auth cookie
混合流动特性
使用 code id_token 响应类型重定向,并在查询字符串中接收返回的 id 令牌以及授权代码。为防止替换攻击,您在重定向期间提供 nonce 值,然后验证响应中是否存在与 id 令牌声明 相同的值。
安全
就安全性而言,我认为它并不比 PKCE 差,因为它的安全性经过适当考虑并包含在 Open Id Connect Specification。
混合使用
如果您需要上述行为,则只能使用混合流程。它不是最常用的流,因为在使用身份验证 cookie 的 Web 应用程序中,前端无论如何都可以很容易地通过其后端获取用户信息,而后端又可以调用用户信息端点。