OpenID Connect:使用 response_type 令牌请求范围 openid 是不是错误
Posted
技术标签:
【中文标题】OpenID Connect:使用 response_type 令牌请求范围 openid 是不是错误【英文标题】:OpenID Connect: Is it an error to request scope openid with response_type tokenOpenID Connect:使用 response_type 令牌请求范围 openid 是否错误 【发布时间】:2018-12-28 08:40:32 【问题描述】:有一个行为不端的 OpenID Connect“兼容”iDP(它现在应该保持无名) - 在使用范围 openid 和任何包含 id_token 的 response_type 时会引发错误。这肯定是已报告的错误。
当范围包括 openid 并且 response_type 只是“token”时,相同的 iDP 也会在隐式流中返回 id_token。这弄乱了广泛使用的 oidc-client npm 包,它报告了一个错误“Not expecting id_token in response”——根据 OIDC 规范,这是严格正确的
但这引出了一个有趣的问题:
鉴于 OIDC 规范第 1 节的基本前提:
OpenID Connect 将身份验证作为 OAuth 的扩展来实现 2.0授权流程。客户端通过在授权中包含 openid 范围值来请求使用此扩展 请求。
3.2.2.1 节说
注意:虽然 OAuth 2.0 还定义了令牌响应类型值 隐式流,OpenID Connect 不使用此响应类型, 因为不会返回任何 ID Token。
因此将两者一起使用应该是错误的吗?或者 openid 在范围内的事实是否应该导致实现默认“添加” id_token 到隐式流的 response_type ?
【问题讨论】:
【参考方案1】:如我所见,OpenID Connect 提供程序应该返回一个错误。它应该使用 OAuth 2.0 specification 定义的错误代码 invalid_request
进行隐式错误响应。
请求缺少必需的参数、包含无效的参数值、多次包含参数或格式错误。
但从规范的角度来看,错误响应不是必需的/强制性的。它只是说带有令牌的响应类型无效。
注意:虽然 OAuth 2.0 还为隐式流定义了令牌响应类型值,但 OpenID Connect 不使用此响应类型,因为不会返回任何 ID 令牌。
我认为提到的 OpenID Connect 提供者只尊重范围值并将请求作为 OpenID Connect 请求提供服务。因此,您会得到一个 id 令牌作为响应。
【讨论】:
以上是关于OpenID Connect:使用 response_type 令牌请求范围 openid 是不是错误的主要内容,如果未能解决你的问题,请参考以下文章
OpenID Connect:使用 response_type 令牌请求范围 openid 是不是错误
使用 jumbojett/OpenID-Connect-PHP 库的 KeyCloak 身份验证流程
使用不同的 redirect_uri 和 openid.realm 参数从 Google OpenID 2.0 迁移到 OpenID Connect