Spring boot 用okta实现RBAC

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提供者之

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

我希望实现标准RBAC模型,在该模型中,我将映射角色下的多个权限,并且角色与用户关联。基本上它包括3个级别权限>角色>用户

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

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


提前感谢。

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

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

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


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

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

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


    • 可能的解决方案:

      您可以将作用域(访问令牌中的scp)设置为您的权限。以下是步骤:

    • 在授权服务器中,创建自定义范围(权限)并将其设置为默认范围(这是必需的)。 例如,创建2个默认作用域:
    • 转到授权服务器中的访问策略如果未定义,请创建一个

    • 在“访问策略”页面中创建访问策略规则,这些规则将是组和范围之间的映射

    • 测试在Token Preview选项卡中,这里的技巧是将scopes字段保留为空,以便授权服务器可以返回为用户设置的默认作用域,如Okta所述:

    • 当客户端在令牌请求中忽略scope参数时,将在访问令牌中返回默认作用域,前提是该作用域作为访问策略规则的一部分被允许

    • 现在,在您的应用程序中,当请求授权代码时,请确保scope query param为空

    • 根据您正在使用的库,如果默认情况下他们希望始终返回id_令牌,您可能会遇到一些问题,但您可能能够对其进行自定义。例如:

    • 解决方案限制:

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

      以防您需要任何基本作用域

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

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

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

      第二个:将从第一个请求返回的范围追加到您想要的基本范围列表中,例如
      openid
      profile
      ,“email”。因此,您将发送类似(已编码)的内容

      免责声明:

      上述解决方案可能不被推荐,但它是有效的。如果任何人能找到上述解决方案的任何安全问题,请将其留在评论中。

      可能的解决方案:

      您可以将作用域(访问令牌中的scp)设置为您的权限。以下是步骤:

    • 在授权服务器中,创建自定义范围(权限)并将其设置为默认范围(这是必需的)。 例如,创建2个默认作用域:
    • 转到授权服务器中的访问策略如果未定义,请创建一个

    • 在“访问策略”页面中创建访问策略规则,这些规则将是组和范围之间的映射

    • 测试在Token Preview选项卡中,这里的技巧是将scopes字段保留为空,以便授权服务器可以返回为用户设置的默认作用域,如Okta所述:

    • 当客户端在令牌请求中忽略scope参数时,将在访问令牌中返回默认作用域,前提是该作用域作为访问策略规则的一部分被允许

    • 现在,在您的应用程序中,当请求授权代码时,请确保scope query param为空

    • 根据您正在使用的库,如果默认情况下他们希望始终返回id_令牌,您可能会遇到一些问题,但您可能能够对其进行自定义。例如:

    • 解决方案限制:

      如步骤4和步骤5所述,我们省略了scope查询参数,这意味着只有自定义的scope assig
      books.read (default=true)
      books.write (default=true)
      
      ?scope=books.read%20books.write%20openid%20profile%20email