可以使用 JWT 的子字段来授予 API 资源的权限吗?

Posted

技术标签:

【中文标题】可以使用 JWT 的子字段来授予 API 资源的权限吗?【英文标题】:Can sub field from JWT be used to grant permission to API resource? 【发布时间】:2020-11-16 06:31:12 【问题描述】:

过去几天我读了很多关于 OAuth2 的文章,我了解使用范围以用户的名义委托访问。我的问题是,如果我有用户 sub: Asub: B/resource/X,只有 用户 A 应该有权访问 /resource/X,我应该使用scope "read:X" 组合sub 字段以确定用户是否可以访问该资源,或者 只有 具有值 A 的子字段就足够了吗?

我正在学习如何使用 Auth0 API,2018 年发布的一个问题没有答案,这正是我的疑惑: Comment about the sub field from tokens

【问题讨论】:

【参考方案1】:

在简单的 API 中,通常单独使用范围来确定对资源的访问。读取和写入范围很常见,代表其他高级权限的范围也是如此。不过,这种扩展的能力是有限度的。

在更复杂的业务应用程序中,您通常需要从令牌中识别用户(通过 sub 声明),以便您随后可以提供与该特定用户的历史相关联的资源。

这通常涉及将 sub 声明从访问令牌映射到您的 API 自己的数据,如下面的帖子所示:

User Data Management API Authorization

【讨论】:

以上是关于可以使用 JWT 的子字段来授予 API 资源的权限吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试使用 JWT 身份验证的节点 API(使用用户登录获取令牌)

使用 JWT 刷新令牌如何安全?

使用 Java Spring Rest Api 执行授权码授予流程

JWT 客户端凭证授予的存储位置

在 .net 核心 web api 中存储 JWT 令牌的位置?

OAuth2:JWT授权授予和客户端凭据授权与JWT客户端身份验证之间的区别是什么?