【问题标题】:Setting permissions in Keycloak在 Keycloak 中设置权限
【发布时间】:2022-01-26 15:45:09
【问题描述】:

我想使用 Keycloak 的授权系统创建基于角色的访问控制系统。

我在微服务架构中使用 OAuth 2.0 并面临以下问题:我有具有唯一 ID 的记录(它们植根于其他实体),我想要实现的是只有某些用户或一组用户可以看到(修改)具有这些 ID 的条目。 而且我希望能够将用户(或组)显式绑定到这些 ID(例如,可以在 JWT 中接收它们)。

如何使用 Keycloak 解决此问题以及执行此操作的最佳做​​法? 也许我误解了什么,这个问题可以用另一种方式解决?

提前致谢!

【问题讨论】:

    标签: permissions authorization keycloak scopes policies


    【解决方案1】:

    有两种处理方法:

    1.使用客户角色:

    i) ie. create some set of pre-defined roles (viewer, admin, editor, etc).
    ii) Now whenever your IDs are generated, then generate one client in keycloak and assign any of above roles.
    iii) in JWT, it will be visible in path : 
        "resource_access" --> <CLIENT_IDs> --> "roles": [your defined roles]
    

    然后,在服务层可以使用授予的权限或角色组进行自动化。

    2。使用领域角色:

    i) in JWT: this will be fetched from path:  "realm_access"-> "roles":[your defined roles].
    

    如果您只有 2 个角色(例如:管理员和查看者),则首选第二个选项。

    如果这有帮助,请告诉我。 :)

    【讨论】:

    • 如果我有1000个ID,那么JWT令牌中会有1000个角色?是否可以将这些 ID 写入用户组的自定义属性中,然后在单独的请求中获取它们?
    • 没错,在 JWT 中,您将拥有 1000 个角色映射(客户端 + 角色)。如果您在请求标头中没有其他任何内容,那么这就足够了。在我的一个项目中,我们有 32K 条记录,每个用户都有自定义角色。我们将服务容器 (tomcat) 中的标头大小增加到最大限制。
    • 这对网络通信有多大的性能影响?您是否有一个链接令牌的微服务应用程序?
    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2017-07-12
    • 1970-01-01
    相关资源
    最近更新 更多