有一个行为不端的 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 令牌。
因此,将两者一起使用是否应该是错误的?或者 openid 在范围内的事实是否应该导致实现默认将 id_token “添加”到隐式流的 response_type ?