当前位置: 首页 > 知识库问答 >
问题:

JSON Web令牌中的客户端ID或多个访问群体

郏博瀚
2023-03-14

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

从我的客户端登录时,我在请求中不包括它的客户端id,但在我发现的大多数实现中,aud设置为该客户端id。我倾向于在我的登录请求中包含一个customer(客户)audience\u id(观众id)字段,然后将令牌中的aud(观众id)设置为客户端id(客户id)和观众id(观众id)的数组,但这似乎意味着该令牌对这两个观众都有效,这让我觉得我应该添加一个名为客户机的自定义声明,专门声明此令牌是为特定客户机创建的。

我没有在OAuth登录请求中遇到任何在线实现同时包含客户端id和观众id,也没有在规范中看到客户端的保留声明。

我错过什么了吗?

在JWT中具体说明不同的客户id和受众id的最佳实践是什么?

共有1个答案

卢作人
2023-03-14

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

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

因此,最佳实践是aud应该标识资源服务器。

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

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

因此,最佳实践是azp标识客户端。

 类似资料:
  • 我正在写一个小小的短信网关,供几个项目使用, 我实现了laravel passport身份验证(客户端凭据授予令牌) 然后,我向api中间件组添加了: 逻辑工作正常,现在在我的控制器中,我需要让客户机与有效令牌关联。 routes.php 出于明显的安全原因,我无法将客户端id与消费者请求一起发送,例如,

  • 我目前正在尝试使用ADFS 2016认证angular 7应用程序(使用angular-oauth2-oidc)。到目前为止,它工作得很好。当我访问应用程序时,我被重定向到ADFS登录页面,在那里输入我的凭据并获得令牌。 现在,当应用程序调用web API时,它在请求头中发送访问令牌。ADFS返回的访问令牌如下所示: 问题是web API必须知道进行调用的用户的ID(因为在应用程序级别定义了一些权

  • 我试图实现一个单页应用程序,同时使用AWS Cognito作为IdP。我计划将一个节点服务器连接到MongoDB。基本上是平均堆栈。 我的申请结构: 我在用户池的应用客户端设置中选择了OAuth Flows选项。 和用于允许的OAuth范围。 主页(登录/注册)-- 理解: 使用文档中提到的解码技术,我想我应该能够验证

  • 下一个问题是如何刷新获得的访问令牌? 我试图使用下面的命令这样做,但我得到了“访问此资源需要完全身份验证”。在我获得新的刷新令牌后,我可以使用刷新令牌再次刷新我的新访问令牌吗? 谢谢。

  • 我想知道如何使用混合流刷新IdentityServer4客户端中的访问令牌,它是使用ASP构建的。NET核心MVC。 如果我正确理解了整个概念,客户端首先需要拥有“离线访问”范围,以便能够使用刷新令牌,这是启用短期访问令牌的最佳实践,并且能够撤销刷新令牌,防止向客户端颁发任何新的访问令牌。 我成功地获得了一个访问令牌和一个刷新令牌,但是我应该如何处理MVC客户端中访问令牌的实际更新过程呢? Ope

  • 我想要一些关于如何在隐式授予流中使用ID令牌和访问令牌的澄清。我有一个使用msal.js for Angular包的Angular SPA和一个Web API。API不调用任何外部服务,如MSFT Graph。后端仅使用JWT中的角色声明来建立对API功能的RBAC授权。 这个文档写着:https://docs.microsoft.com/en-us/azure/active-directory/