Keycloak 授权服务 - 动态资源和资源属性

Posted

技术标签:

【中文标题】Keycloak 授权服务 - 动态资源和资源属性【英文标题】:Keycloak Authorization Service - Dynamic Resource and Resource attributes 【发布时间】:2020-10-08 10:30:23 【问题描述】:

我有一个 Spring Boot 应用程序,我正在使用 Keycloak 的授权服务。

假设我有一个名为Report1 的报告,ID 为1,由user1 创建。

访问资源的 URL 是 /app/reportId。要访问报告,请使用/app/1

我想将访问此 URL 的权限仅限于报告的所有者/创建者 (user1)。由于这是一种“动态”url,并且没有事先确定 ID,因此我无法在 Keycloak 中创建具有静态 url (app/1) 的资源。

我想介绍一个类似的 JS 策略:

    var context = $evaluation.context;
    var identity = context.identity;
    var permission = $evaluation.permission;
    var resource = <Report1>

    if (resource.<created_by_user_id> == identity.id) 
        $evaluation.grant();
    

从上面的代码:

Report1 应由 DB 动态确定 created_by_user_id 是 Report1 的一个属性,其中包含 user1

有什么想法吗?

【问题讨论】:

你是怎么解决这个问题的? 【参考方案1】:

据我所知,支持创建资源时的动态 url。 关于资源属性,你可以这样使用:

var attributes = resource.getAttributes();

您可以附加一个专用属性,例如所有权,其中值是创建者 (user1)。

【讨论】:

以上是关于Keycloak 授权服务 - 动态资源和资源属性的主要内容,如果未能解决你的问题,请参考以下文章

数十个用户的数十个资源的Keycloak授权服务

Keycloak Spring Boot 适配器和匿名资源

Spring Security + Keycloak 授权:如何将端点与资源相关联?

如何通过 Keycloak Java API 根据资源类型发出授权请求?

Spring OAuth2 使用 Keycloak 自动登录

带有 keycloak 的 ABAC - 在策略中使用资源属性