如何为OAuth2访问令牌指定访问群体?

如何为OAuth2访问令牌指定访问群体?,oauth,oauth-2.0,jwt,access-token,Oauth,Oauth 2.0,Jwt,Access Token,我感到困惑的是,在向授权服务器发送授权请求时,似乎没有标准的方法来指定访问令牌的访问群体 OAuth2将访问令牌指定为不透明字符串;规范中只提到了一个“受众”,即访问令牌可能受到“受众限制”。 许多最近的授权服务器实现似乎产生了JWT访问令牌,JWT指定了访问群体(aud)声明 据我所知: -Auth0使用“访问群体”参数 -Connect2id使用“资源”参数 -Identity Server对“aud”声明使用基于颁发者的固定值,并假设范围足够了—但是,这并不适合所有用例。 -优秀的“OAu

我感到困惑的是,在向授权服务器发送授权请求时,似乎没有标准的方法来指定访问令牌的访问群体

OAuth2将访问令牌指定为不透明字符串;规范中只提到了一个“受众”,即访问令牌可能受到“受众限制”。 许多最近的授权服务器实现似乎产生了JWT访问令牌,JWT指定了访问群体(aud)声明

据我所知: -Auth0使用“访问群体”参数 -Connect2id使用“资源”参数 -Identity Server对“aud”声明使用基于颁发者的固定值,并假设范围足够了—但是,这并不适合所有用例。 -优秀的“OAuth2 in Action”一书在“aud”声明中展示了一个资源服务器URI的示例,但没有说明它来自何处


那么,如何以标准方式为特定受众(资源服务器、API等)获取访问令牌呢?

我认为您是对的。有两个可用的指南。

明确定义的“aud”参数为:

必需的。此ID令牌的目标受众。它必须 包含依赖方的OAuth 2.0客户端id作为访问群体 价值它还可能包含其他受众的标识符。在 一般情况下,aud值是区分大小写的字符串数组。在里面 常见的特殊情况是,只有一个观众时,澳元值可能 必须是单个区分大小写的字符串


您在对已接受答案的评论中提到了Tschofeniq草案,但实际上,doc似乎确实支持:

受众URI必须是[3]第4.3节定义的绝对URI。它可能包括一个“application/x-www-form-urlencoded”格式的查询组件

事实上,它非常有力地表明,这一步骤非常重要,应该以这种方式进行:

步骤(2):当客户端与令牌端点交互以获取访问令牌时,它必须填充新定义的
访问群体
参数


因此,看来Auth0的方向可能是正确的。正如您在评论中指出的,
aud
字段用于响应,而不是请求(NodeJs中的公共库设置了类似这样的字段(以及
sub
jti
iss
)当您解码JWT时。

就Auth0选择实现其解决方案而言,您是正确的,
受众
是随auth/authz请求发送的参数。您还可以将请求的
范围
属性添加到
范围
参数中-例如
范围:read:books
-它不遵守strict标准,因为在规范方面不存在。Auth0有API(资源API)的概念,即标识符是客户端可以用作访问群体值的访问群体,并且您可以在该资源API上设置特定的作用域。感谢您的响应。请注意(已放弃?)Tschofenig草案规范谈到令牌请求中的访问群体参数,而不是授权请求;OpenID Connect规范中提到的“aud”也是关于响应中的声明,而不是参数。