Spring boot 用okta实现RBAC
目前,我们的spring boot应用程序使用okta登录。有必要为应用程序实现RBAC,因此我试图看看是否可以利用okta本身将用户映射到特定角色 我希望实现标准RBAC模型,在该模型中,我将映射角色下的多个权限,并且角色与用户关联。基本上它包括3个级别权限>角色>用户 但在okta中,我看不到映射角色和权限的标准方法。RBAC是通过创建组和将组与用户关联来实现的,分为两个级别。和组需要作为自定义声明添加 我如何在okta中实现标准RBAC映射(权限>角色>用户),或者这是需要在IDP提供者之外处理的事情Spring boot 用okta实现RBAC,spring-boot,openid-connect,okta,rbac,idp,Spring Boot,Openid Connect,Okta,Rbac,Idp,目前,我们的spring boot应用程序使用okta登录。有必要为应用程序实现RBAC,因此我试图看看是否可以利用okta本身将用户映射到特定角色 我希望实现标准RBAC模型,在该模型中,我将映射角色下的多个权限,并且角色与用户关联。基本上它包括3个级别权限>角色>用户 但在okta中,我看不到映射角色和权限的标准方法。RBAC是通过创建组和将组与用户关联来实现的,分为两个级别。和组需要作为自定义声明添加 我如何在okta中实现标准RBAC映射(权限>角色>用户),或者这是需要在IDP提供者之
提前感谢。当您了解角色和权限的详细信息时,数据往往是特定于域的,并且会经常更改。我建议不要尝试在授权服务器中管理它 一种让您能够完全控制声明的设计模式是形成一个自定义AuthenticationPrincipal,其中包含来自应用程序数据库的角色或权限 如果对这种模式感兴趣,请参阅我的以下资源:
- 在授权服务器中,创建自定义范围(权限)并将其设置为默认范围(这是必需的)。 例如,创建2个默认作用域:
- 转到授权服务器中的访问策略如果未定义,请创建一个
- 在“访问策略”页面中创建访问策略规则,这些规则将是组和范围之间的映射
- 测试在Token Preview选项卡中,这里的技巧是将scopes字段保留为空,以便授权服务器可以返回为用户设置的默认作用域,如Okta所述: 当客户端在令牌请求中忽略scope参数时,将在访问令牌中返回默认作用域,前提是该作用域作为访问策略规则的一部分被允许
- 现在,在您的应用程序中,当请求授权代码时,请确保scope query param为空
- 根据您正在使用的库,如果默认情况下他们希望始终返回id_令牌,您可能会遇到一些问题,但您可能能够对其进行自定义。例如: 解决方案限制: 如步骤4和步骤5所述,我们省略了范围查询参数,这意味着只返回为用户或其组分配的自定义范围,因为基本范围是Okta预定义的,例如
- 可能的解决方案:
您可以将作用域(访问令牌中的scp)设置为您的权限。以下是步骤:
profile
,openid
,email
。。。不会被退回。这也意味着我们正在跳过需要openid
作用域的OIDC,因此id\u令牌
不会被返回,只有access\u令牌
会被返回。因此,此解决方案假定您不需要Okta预定义的任何基本作用域
以防您需要任何基本作用域
如限制中所述,解决方案假定您不需要Okta预定义的任何基本作用域。但如果你这样做了,下面是一个解决方案,在这种情况下工作,但不是很好
在oauth流中请求授权代码时,需要发送两次请求
第一个:省略范围查询参数,因此返回默认范围
第二个:将从第一个请求返回的范围追加到您想要的基本范围列表中,例如openid
,profile
,“email”。因此,您将发送类似(已编码)的内容
免责声明:上述解决方案可能不被推荐,但它是有效的。如果任何人能找到上述解决方案的任何安全问题,请将其留在评论中。可能的解决方案: 您可以将作用域(访问令牌中的scp)设置为您的权限。以下是步骤:
books.read (default=true)
books.write (default=true)
?scope=books.read%20books.write%20openid%20profile%20email