【问题标题】:Implementing RBAC using okta使用 okta 实现 RBAC
【发布时间】:2021-01-09 08:37:48
【问题描述】:

目前我们的 Spring Boot 应用使用 okta 进行登录。需要为应用程序实现 RBAC,因此我试图查看是否可以利用 okta 本身将用户映射到特定角色。

我想实现标准 RBAC 模型,在该模型中,我将在一个角色下映射多个权限,并且这些角色与用户相关联。基本上它涉及 3 级权限 > 角色 > 用户。

但在 okta 中,我看不到映射角色和权限的标准方法。 RBAC 是通过创建组和将组关联到用户来实现的,这是两个层次。并且需要将组添加为自定义声明。

如何在 okta 中实现标准 RBAC 映射(权限 > 角色 > 用户),或者它需要在 IDP 提供者之外处理。

提前致谢。

【问题讨论】:

  • Okta 允许您将用户分组并使用@PreAuthorize 之类的东西(在春季:developer.okta.com/blog/2019/06/20/spring-preauthorize)按他们过滤。我认为没有一种方法可以像您要​​求的那样构建嵌套组。您可能需要为此编写自定义代码。

标签: spring-boot openid-connect okta rbac idp


【解决方案1】:

当您了解角色和权限的详细信息时,数据往往是特定于域的并且经常更改。我建议不要尝试在授权服务器中管理它。

让您完全控制声明的一种设计模式是形成一个自定义 AuthenticationPrincipal,其中包括来自您的应用程序数据库的角色或权限。

如果对这种模式感兴趣,请查看我的以下资源:

【讨论】:

    【解决方案2】:

    可能的解决方案:

    您可以将范围(访问令牌中的 scp)设为您的权限。步骤如下:

    1. 在您的授权服务器中,创建您的自定义范围(权限)并将它们设置为默认范围(这是必要的)。 例如创建 2 个默认范围:
    books.read (default=true)
    books.write (default=true)
    
    1. 如果没有定义,请转到授权服务器中的访问策略创建一个。

    2. 在访问策略页面创建访问策略规则,这些规则将是您在组和范围之间的映射。

    3. 在令牌预览选项卡中测试,这里的技巧是将范围字段留空,以便授权服务器可以返回为用户设置的默认范围,如 Okta 所述:

    当客户端在令牌请求中省略范围参数时,将在访问令牌中返回默认范围,前提是允许此范围作为访问策略规则的一部分。

    1. 现在在您的应用程序中请求授权代码时,请确保范围查询参数为空。

    2. 根据您使用的库,您可能会遇到一些问题,如果默认情况下他们期望始终返回 id_token 但您可能能够自定义它。例如:https://github.com/okta/okta-auth-js/issues/827

    解决方案限制:

    如第 4 步和第 5 步中所述,我们省略了范围查询参数,这意味着仅返回我们为用户或其组分配的自定义范围,因为 Okta 预定义的基本范围,例如 profile , openid, email ... 不会被退回。这也意味着我们正在跳过需要openid 范围的OIDC,因此不会返回id_token,只会返回access_token。因此,此解决方案假定您不需要 Okta 预定义的任何基本范围。

    如果您需要任何基本范围

    如限制中所述,该解决方案假定您不需要 Okta 预定义的任何基本范围。但如果你这样做了,那么下面是一个在这种情况下有效但不是很好的解决方案。

    在oauth流程中请求授权码时,需要发送两次请求

    第一个:省略范围查询参数,因此返回默认范围。

    第二个:将第一个请求返回的范围附加到您想要的基本范围列表中,例如openidprofile、'email`。所以你会发送类似(已编码)

    ?scope=books.read%20books.write%20openid%20profile%20email
    

    免责声明:
    可能不推荐上述解决方案,但它确实有效。如果有人发现上述解决方案存在任何安全问题,请将其留在 cmets 中。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2016-06-09
      • 2012-02-22
      • 2021-11-26
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多