我很困惑,在向授权服务器发送授权请求时似乎没有标准方法来指定访问令牌的受众。
OAuth2将访问令牌指定为不透明字符串;在规范中只提到一个“观众”,说访问令牌可能是“受众限制”。 许多最近的授权服务器实现似乎产生JWT访问令牌,而JWT指定了受众(aud)声明。
据我所知: - Auth0使用'audience'参数 - Connect2id使用'resource'参数 - Identity Server对“aud”声明使用基于发行者的固定值,并假定作用域足够 - 但是,这并不适合所有用例。 - 优秀的“OAuth2 in Action”一书中显示了“aud”声明中的资源服务器URI示例,但没有说明它来自何处。
那么,如何以标准方式获取特定受众(资源服务器,API,...)的访问令牌?
答案 0 :(得分:2)
我认为你是对的。有几个指南可供使用。 The OAuth 2.0 Authorization Framework: Bearer Token Usage OAuth 2.0: Audience Information (draft-tschofenig-oauth-audience-00.txt)
OpenID connect明确定义" aud"参数为:
必需的。此ID令牌所针对的受众。它必须 包含依赖方的OAuth 2.0 client_id作为受众 值。它还可以包含其他受众的标识符。在里面 一般情况下,aud值是一个区分大小写的字符串数组。在 当有一个受众时,常见的特殊情况,即审计值可以 是一个区分大小写的字符串。
答案 1 :(得分:1)
您在对已接受答案的评论中提到了 Tschofeniq 草案,但实际上看起来该文档实际上确实支持using the audience
field:
受众 URI 必须是 [3] 的第 4.3 节定义的绝对 URI。它可以包含一个“application/x-www-form-urlencoded”格式的查询组件
事实上,这一步很重要,应该以这种方式完成:
<块引用>步骤 (2):当客户端与令牌端点交互以获取访问令牌时,它必须填充新定义的 audience
参数...
所以看起来 Auth0 可能按照他们的方向走在正确的轨道上。正如您在评论中指出的那样,aud
字段用于响应,而不是请求(NodeJ 中的 jsonwebtoken 等常用库设置了这样的字段(以及 sub
、{{ 1}} 和 jti
) 当您解码 JWT 时。