JSON Web令牌中的客户端ID或多个受众

时间:2015-08-14 15:41:33

标签: oauth oauth-2.0 jwt json-web-token

我正在我的应用程序中使用JWT实现OAuth 2.0,并且无法确定将aud声明设置为什么。用户将通过我的身份验证服务器“登录”我的客户端以访问我的API(资源)服务器。我希望我的令牌仅对特定客户端和特定API有效。

authentication flow

从我的客户端登录时,我在请求中不包括client_id,而是在most implementations I've found,{{ 1}}设置为aud。我倾向于在我的登录请求中包含客户client_id字段,然后将令牌中的audience_id设置为audclient_id的数组,但是感觉就像它只是意味着该令牌对audience_id这两个人都有效,这让我觉得我应该添加一个名为audiences的自定义声明来明确指出这个令牌是为特定客户创建。

我没有遇到过任何在OAuth登录请求中同时包含clientclient_id(s)的在线实施,也没有看到audience_id {{的保留声明3}}

我在这里遗漏了什么吗?

在JWT中明确说明其他clientclient_id的最佳做法是什么?

1 个答案:

答案 0 :(得分:8)

JWT的受众是资源服务器,因为这是令牌将被处理,即验证,检查和采取行动的地方。来自RFC 7519,https://tools.ietf.org/html/rfc7519#section-4.1.3

  

" aud" (观众)声明确定了JWT的收件人   打算用于。每个校长都打算处理JWT必须   在受众索赔中表明自己的价值   [...]
  对受众价值的解释通常是针对具体应用的   [...]

因此,最佳做法是aud应标识资源服务器。

客户端只是令牌的演示者,最佳做法是(即在OpenID Connect和一些新兴的OAuth 2.0 exension drafts中)使用azp(授权演示者)进行该声明。来自http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken

  

azp
  可选的。授权方 - ID令牌所在的一方   发行。如果存在,它必须包含此的OAuth 2.0客户端ID   派对。仅当ID令牌具有单个时才需要此声明   观众价值和观众不同于授权   党。
  [...]

所以最佳做法是azp标识客户。