Oauth 2.0 RBAC-作用域或自定义声明

Oauth 2.0 RBAC-作用域或自定义声明,oauth-2.0,auth0,okta,rbac,openid-connect,Oauth 2.0,Auth0,Okta,Rbac,Openid Connect,在OIDC规范()的第5.4节中,它说“与访问令牌相关联的作用域决定了当使用这些令牌访问OAuth 2.0受保护的端点时,哪些资源可用。” 正如我所读到的,这似乎很简单,如果您拥有API应该尊重的任何权限,那么您可以将它们放在访问令牌的“scopes”声明中 但是,Auth0和Okta都将用户权限放在自定义声明中。在Auth0s情况下,它将用户权限放在“权限”声明中,在Oktas情况下,用户权限放在访问令牌的“组”声明中 因为这两个身份提供者都将权限作为自定义声明,这让我觉得我读的规范是错误的。

在OIDC规范()的第5.4节中,它说“与访问令牌相关联的作用域决定了当使用这些令牌访问OAuth 2.0受保护的端点时,哪些资源可用。”

正如我所读到的,这似乎很简单,如果您拥有API应该尊重的任何权限,那么您可以将它们放在访问令牌的“scopes”声明中

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


因为这两个身份提供者都将权限作为自定义声明,这让我觉得我读的规范是错误的。是否有人有想法或能够弄清楚何时将权限放入自定义声明与何时将权限放入范围声明?

这里的区别是令牌的范围与用户的权限。某些auth0用户将在自定义声明中添加用户权限,以执行诸如gate内容之类的操作。令牌中的作用域显式描述令牌可以访问的内容

此文档显示了具有作用域的访问令牌的示例:

下面是通过自定义声明(此实例中为id令牌)向令牌添加权限的示例:

作用域往往是一种高级权限,例如“读/写”或令牌可用于哪些API。声明是API识别和授权请求所需的内容。并非所有声明都包含在访问令牌中。我在这里的文章可能会帮助你理解你的选择: