我正在我的应用程序中使用JWT实现OAuth 2.0,并且无法确定将aud
声明设置为什么。用户将通过我的身份验证服务器“登录”我的客户端以访问我的API(资源)服务器。我希望我的令牌仅对特定客户端和特定API有效。
从我的客户端登录时,我在请求中不包括client_id
,而是在most implementations I've found,{{ 1}}设置为aud
。我倾向于在我的登录请求中包含客户client_id
字段,然后将令牌中的audience_id
设置为aud
和client_id
的数组,但是感觉就像它只是意味着该令牌对audience_id
这两个人都有效,这让我觉得我应该添加一个名为audiences
的自定义声明来明确指出这个令牌是为特定客户创建。
我没有遇到过任何在OAuth登录请求中同时包含client
和client_id
(s)的在线实施,也没有看到audience_id
{{的保留声明3}}
我在这里遗漏了什么吗?
在JWT中明确说明其他client
和client_id
的最佳做法是什么?
答案 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
标识客户。