javascript - 基于 Keycloak ABAC 的策略执行器,无需在 token 中添加属性

标签 javascript spring-security authorization keycloak keycloak-services

我正在尝试为我的 API 设置基于 keycloak 的 ABAC、基于属性的访问控制。我能够将其设置为创建一个基于 javascript 的策略,该策略查找特定的用户属性,然后授予访问权限,例如

var context = $evaluation.getContext();
var identity = context.getIdentity();
var attributes = identity.getAttributes();
var privileges = attributes.containsValue('userAttributeFlag','Y');
if (privileges) {
    $evaluation.grant();
}else{
    $evaluation.deny();
}

只有当属性userAttributeFlag被添加为客户端的用户属性映射器时才可能实现,以便在访问 token 中添加相同的属性

enter image description here

我的问题是,是否始终需要在访问 token 中添加属性才能使 ABAC javascript 策略发挥作用。将其添加到 token 的问题是,如果我们有很多属性,这些属性会不必要地增加我们希望避免的 token 的大小。

在映射器中,可以选择将属性添加到 userInfo,但是否可以通过基于 JavaScript 的策略对其进行评估。

感谢您的帮助。

最佳答案

对我来说,听起来您正在使用 Keycloak 的 ABAC 来实现基于权限的 AC 或 RBAC。 真正的ABAC假设有关用户的一组(相对)较小的属性一组资源属性,例如用户部门资源部门。在这种情况下,您有一个根据这些属性授予或拒绝访问的策略。

例如,ALFA 政策如下所示:

namespace example{
   policy example{
      apply firstApplicable
      rule allowSameDepartment{
         permit
         condition user.department == doc.department
      }
   }
}

就您而言,您的代码似乎正在执行检查。这迫使您创建更多用户属性来实现粒度。这会导致代币膨胀。这是所有基于 token /基于身份的授权方案所共有的问题。 SAML 也是如此。 JWT 确实如此。

关于javascript - 基于 Keycloak ABAC 的策略执行器,无需在 token 中添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628478/

相关文章:

javascript - 编辑后带有 JQuery 或 JavaScript 的 HTML 源代码

php - 如何在 Laravel 的 Handler 渲染中捕获授权错误

javascript - Coffeescript:Splat Sum 函数

javascript - Splunk 中可以使用甘特图放大功能吗?

java - DBCP2初始化

spring - 如何使用 keycloak 和 spring 读取所有用户?

java - 使用 Spring Security Autowiring 依赖注入(inject)

embedded - lighttpd 中的 FastCGI 授权者支持损坏了吗?

google-cloud-platform - 创建 ssl 证书时出现错误 "- Insufficient Permission"

javascript - 使用 javascript/jQuery 在页脚后面的 slideUP div