目前,我们的spring boot应用程序使用okta登录。因为需要为应用程序实现RBAC,所以我想看看是否可以利用okta本身将用户映射到特定的角色。
我想实现标准的RBAC模型,在该模型中,我将映射角色下的多个权限,并且角色与用户相关联。基本上,它涉及三个级别的权限>角色>用户。
但在okta中,我没有看到映射角色和权限的标准方法。RBAC是通过创建组和将组关联到用户来实现的,这是两个级别。并且需要将组添加为自定义声明。
我如何在okta中实现标准的RBAC映射(权限>角色>用户),或者这是需要在IDP提供者外部处理的事情。
提前谢谢。
发布于 2020-09-26 18:15:44
当您深入了解角色和权限的详细信息时,数据往往是特定于域的,并且经常更改。我建议不要尝试在授权服务器中管理它。
一种可以让您完全控制声明的设计模式是形成一个自定义的AuthenticationPrincipal,其中包含来自应用程序数据库的角色或权限。
如果对此模式感兴趣,请参阅我的以下参考资料:
发布于 2021-06-20 15:35:31
可能的解决方案:
您可以将作用域(访问令牌中的scp)设置为您的权限。具体步骤如下:
books.read (default=true)
books.write (default=true)所述
当客户端在令牌请求中省略scope参数时,将在访问令牌中返回默认作用域,前提是该作用域被允许作为访问策略规则的一部分。
,
解决方案限制:
正如在步骤4和5中提到的,我们省略了作用域查询参数,这意味着将只返回分配给用户或他的组的自定义作用域,因为由Okta预定义的基本作用域,如profile、openid、email ...不会被退还。这也意味着我们跳过了需要openid作用域的OIDC,所以不会返回id_token,只会返回一个access_token。因此,本解决方案假设您不需要Okta预定义的任何基本作用域。
如果您需要任何基本作用域,请使用
正如限制中所述,该解决方案假设您不需要Okta预定义的任何基本作用域。但是如果你这样做了,那么下面是一个在这种情况下工作的解决方案,但不是很好。
在oauth流中请求授权码时,需要发送两次请求
第一个:省略作用域查询参数,以便返回默认作用域。
第二个:将第一个请求返回的作用域追加到您想要的基本作用域列表中,比如openid、profile、'email`。
?scope=books.read%20books.write%20openid%20profile%20email免责声明:
上面的解决方案可能不被推荐,但它是有效的。如果任何人能发现上述解决方案的任何安全问题,请在评论中留言。
https://stackoverflow.com/questions/64022953
复制相似问题