RBAC - 范围或自定义声明

Posted

技术标签:

【中文标题】RBAC - 范围或自定义声明【英文标题】:RBAC - scopes or custom claim 【发布时间】:2020-01-05 01:56:17 【问题描述】:

在 OIDC 规范 (https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims) 的第 5.4 节中,它说“与访问令牌关联的范围决定了当它们用于访问受 OAuth 2.0 保护的端点时哪些资源可用。”

当我读到这篇文章时,这似乎很简单,如果你有任何 API 应该尊重的权限,你将它们放在访问令牌的“范围”声明中。

但是,Auth0 和 Okta 都将用户权限放在自定义声明中。在 Auth0 的情况下,它将用户权限放在“权限”声明中,在 Oktas 的情况下,他们将用户权限放在访问令牌的“组”声明中。

因为这两个身份提供者都将权限作为自定义声明,这让我觉得我读错了规范。是否有人有想法或可以弄清楚何时将权限放入自定义声明中而不是将它们放入范围声明中?

【问题讨论】:

【参考方案1】:

这里的区别在于令牌的范围用户的权限。一些 auth0 用户将在自定义声明中添加用户权限,以执行诸如门内容之类的操作。令牌中的范围明确描述了令牌可以访问的内容。

此文档显示了一个带有范围的访问令牌示例: https://auth0.com/docs/api-auth/why-use-access-tokens-to-secure-apis#compare-the-tokens

以下是通过自定义声明(在本例中为 id 令牌)向令牌添加权限的示例: https://community.auth0.com/t/how-do-i-add-user-permissions-to-id-token/28611

【讨论】:

【参考方案2】:

范围往往是高级权限,例如“读/写”或令牌可用于哪些 API。声明是您的 API 需要识别 + 授权请求的内容。并非所有声明都包含在访问令牌中。我在这里写的可能会帮助你理解你的选择::https://authguidance.com/2017/10/03/api-tokens-claims

【讨论】:

以上是关于RBAC - 范围或自定义声明的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Auth - 自定义声明的用户列表

AWS Cognito:将自定义声明/属性添加到 JWT 访问令牌

如何处理 Android 中远程视图的异常(自定义小部件或自定义通知)?

使用 Windows 身份验证时向身份添加自定义声明

Webflux 和 keycloak 使用 jwt 中的方法安全级别 @Preauthorize 自定义声明而不是默认范围

向 ID 令牌 OpenID 添加自定义声明