OpenID Connect标准:授权方azp矛盾

jos*_*rry 5 jwt openid-connect

OpenID Connect规范中,azp(授权方)声称似乎有矛盾.

在ID令牌定义部分2中,它说:

AZP

可选的.授权方 - 签发ID令牌的一方.如果存在,它必须包含该方的OAuth 2.0客户端ID.仅当ID令牌具有单个受众值并且受众与授权方不同时才需要此声明.即使授权方与唯一受众相同,也可以包含它...

但在令牌验证部分3.1.3.7中,其中一个步骤似乎反过来说:

  1. 如果ID令牌包含多个受众,则客户端应该验证是否存在azp声明.

任何人都可以对这种明显的差异有所了解吗?只有第二个实例使用声明性语言,所以我倾向于在我的实现中支持它.

Joã*_*elo 5

你是对的azp,OIDC 的整个情况令人困惑.对于什么是值得的,他们有一个与之相关的公开问题; 见OIDC - 问题973(azp声明未指定和过度使用).

根据JWT中"aud"的定义及其在Connect的ID令牌中的使用(相关规范文本在下面复制),似乎发出身份验证请求的客户端/ RP的客户端ID必须是其中一个值,或ID唯一中"aud"声明的唯一值.这是合乎逻辑且一致的,并为实施者提供有关生成和使用ID令牌的可靠且可互操作的指导.我认为发出身份验证请求的RP /客户端的客户端ID应始终在返回的ID令牌的aud中表示.

然而,ID令牌部分中的"azp"周围的文本和ID令牌验证部分似乎可能提出了不同的建议.或许,在某些完全未指定的情况下,发出身份验证请求的RP /客户端的客户端ID可能是azp声明的值,并且aud不会将该客户端标识为预期的收件人.我误解了什么吗?

就个人而言,从客户端应用程序开发人员的角度来看,最好的行动方案似乎是遵守ID令牌验证规则,这些规则总是暗示其中的值azp也将作为一个存在aud.然而,根据网上可用的内容,谷歌似乎使用它有点不同,所以你可能有一个azp未列入其中的值aud,因此可能存在你按照Google规则而不是(仅)OIDC玩的情况.

如果你正在实施一个OP,一个可能不错的选择也是azp如果可能的话,完全不要包含在你发行的令牌中,或者仅在使用多个受众时包含它,其中一个也是其中的值azp.