当客户端需要令牌以访问多个受众时如何创建 JWT?

Posted

技术标签:

【中文标题】当客户端需要令牌以访问多个受众时如何创建 JWT?【英文标题】:How to create JWT when a Client needs token for accessing multiple Audience? 【发布时间】:2016-08-06 00:27:38 【问题描述】:

我使用 OWIN/Katana OAuth 2.0 授权服务器创建了 AuthorizationServer。它被配置为使用 JWT 作为 AccessTokenFormat。此处的 SigningCredentials 源自每个 Audience 独有的 Audience Secret。

我想构建一个客户端,它使用这个 AuthorizationServer 来获取一个令牌,以使用我已经构建的几个 API(资源/受众)。

我在 OAuth 中看到没有 Audience 的概念(JWT 概念),唯一与此最接近的是 Scope。我可以从客户端传递多个范围(受众),但我不明白在这种情况下如何创建 JWT,因为需要多个受众才能验证生成的令牌。

感谢任何帮助或指导。

【问题讨论】:

【参考方案1】:

您应该注意不要混淆两个不同的概念。 Audience claim 指示访问令牌的目标用户。您只能将其用于在允许的受众中配置了该值的服务。

Scopes 限制客户端可以使用服务上的令牌做什么。例如,一个范围可能允许客户发布到您的提要,而另一个范围允许它访问您的关注者列表。

因此,您通常需要两个不同的令牌来访问两个不同的 API。但这并不意味着用户需要进行两次身份验证。

身份验证发生在授权服务器上,当用户仍登录到该服务器时,不会再次提示他/她输入凭据。当用户第一次尝试访问新的 API 时,系统会提示他们同意。

【讨论】:

感谢您回答不同的受众需要两个不同的令牌。如果不使用范围来传递受众,我不明白如何通过受众来获取使用客户端凭据授予的请求中的令牌。到目前为止,我知道的唯一参数是 client_id、client_secret 和 scope。 AuthenticationContext.AcquireToken 的第一个参数采用资源标识符,即目标服务的受众 URI。

以上是关于当客户端需要令牌以访问多个受众时如何创建 JWT?的主要内容,如果未能解决你的问题,请参考以下文章

每个资源服务器的 JWT 多个受众

AzureAD JWT 令牌受众声明前缀使 JWT 令牌无效

如何在不使用会话的情况下获取图形令牌?

如何为 OAuth2 访问令牌指定受众?

JWT 令牌 - 受众、发行人和子域

jwt 访问令牌和刷新令牌流