10

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

认证流程

从我的客户端登录时,我没有将它包含client_id在请求中,但在发现的大多数 实现 中,设置为 that 。我倾向于在我的登录请求中包含一个客户字段然后将令牌中的只需添加一个自定义声明,以明确声明此令牌是为特定客户端创建的。 audclient_idaudience_idaudclient_idaudience_idaudiencesclient

我没有遇到任何在 OAuth 登录请求中同时包含 aclient_id和(s) 的在线实现,也没有在规范中audience_id看到保留声明。client

我在这里错过了什么吗?

在 JWT中具体说明不同client_id的最佳实践是什么?audience_id

4

1 回答 1

10

JWT 的受众是资源服务器,因为这是处理令牌的地方,即验证、检查和操作。来自 RFC 7519,https ://www.rfc-editor.org/rfc/rfc7519#section-4.1.3 :

“aud”(受众)声明标识了 JWT 的
目标接收者。打算处理 JWT 的每个主体都必须
使用受众声明中的值来标识自己。
[...]
受众价值观的解释通常是特定于应用程序的。
[...]

所以最佳实践是aud应该识别资源服务器。

客户端只是令牌的呈现者,最佳实践(即在 OpenID Connect 和一些新兴的 OAuth 2.0 扩展草案中)使用azp(授权的呈现者)进行该声明。来自http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken

azp
可选的。授权方 - 向其颁发 ID 令牌的一方。如果存在,它必须包含该方的 OAuth 2.0 客户端 ID。仅当 ID 令牌具有单个受众值并且该受众与授权方不同时才需要此声明。
[...]

所以最佳实践是azp识别客户端。

于 2015-08-14T16:06:05.373 回答