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

Gre*_*reg 9 oauth oauth-2.0 jwt json-web-token

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

认证流程

从我的客户端登录时,我将其包含client_id在请求中,但在发现的大多数 实现中 ,将其设置为.我倾向于包括客户在我的登录请求字段,然后设置在令牌的数组和,但感觉像它只是意味着该令牌都有效的,这让我觉得我应该只需添加一个自定义声明,专门声明此令牌是为特定客户端创建的. audclient_idaudience_idaudclient_idaudience_idaudiencesclient

我没有遇到任何在线实现,包括OAuth登录请求中的a client_idaudience_id(s),也没有client 在规范中看到保留的声明.

我在这里错过了什么吗?

什么是专门陈述不同client_idaudience_idJWT的最佳做法?

Han*_* Z. 9

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识别客户.

  • 可以使用“范围”概念(和请求参数)间接创建关系;这不仅提供了范围和资源服务器之间的一对一映射,还提供了更大的灵活性。通常,作用域对访问权限进行建模:作用域可以映射到资源服务器,但也可以映射到受资源服务器保护的特定资源,或者资源服务器的集合 (2认同)