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 授权服务 - 动态资源和资源属性的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security + Keycloak 授权:如何将端点与资源相关联?
如何通过 Keycloak Java API 根据资源类型发出授权请求?