Keycloak 自定义声明:您可以在查询外部数据库时在运行时添加参数吗

2024-01-24

目的:我想根据传递给 keycloak 自定义实现的某些字段获取自定义声明,该字段位于应用程序内部,不存在于 keycloak 中。我正在努力在春季将遗留应用程序迁移到 keycloak 进行身份验证,但我们希望继续使用现有应用程序的授权。现有授权基于ABAC,严重依赖动态资源。

Look at this https://stackoverflow.com/a/63311019/3534593创建自定义映射器和声明的解决方案。我可以在步骤 # 5 之前传递一些变量,以便根据基于变量的信息获取自定义声明吗?我还没有尝试实现它,但假设这将由 Keycloak 在内部调用(我已经实现了用户存储 SPI,所以我假设是这样)。

Eg:

用户具有到resource_1的映射,这取决于用户所属的项目(应用程序内部并且不存储在keycloak中)。 因此,根据用户及其project_id,我想调用外部数据库并获取到资源的映射。

挑战:

如何以及在哪里传递project_id?我无法将其存储在 keycloak 中 因为它是动态的而不是静态的。有可能吗?

再如,

我想在我的情况的声明中放入一些值,这些值只能通过 HTTP 请求传输,如下所示,但在 Java 自定义映射器实现中,

http://localhost:8080/auth/realms/tsp_openapi/login-actions/authenticate?session_code=_N7IcTaPF3vTtkPtIKQweKyCQRaXyVu2JF-fgcWQd40&execution=8975a242-0d40-4a47-992c-6ea7dd91728e&client_id=pplantoo&tab_id=fXCfFj3BG2c&**project_id=2232123321**

根据我们在评论中的讨论以及我在Keycloak文档 https://www.keycloak.org/docs/9.0/authorization_services/,您可以在客户端应用程序上设置 Keycloak 适配器,使其也充当策略执行器点(又名)。 PEP 通过更新您的keycloak.json具有这样的属性

"policy-enforcer": {
    "paths": [
      {
        "path": "/protected/resource",
        "claim-information-point": {
          "claims": {
            "project_id_claim": "{request.parameter['project_id']}"
          }
        }
      }
    ]
}

通过这样做,Keycloak适配器将向Keycloak授权服务器发送请求以及project_id_claim查看是否允许当前用户(拥有当前令牌)访问请求的 URL。 我想你也许可以添加自定义策略(例如使用基于 JavaScript 的策略 https://www.keycloak.org/docs/latest/authorization_services/#_policy_js)来查询您的数据库或后端服务,以查看具有提供的project_id的给定用户是否获得授权。如果这不起作用,我想您应该尝试实现自定义“PolicyProvider”接口并使用该接口。但是我不确定它如何/是否会出现在用户界面中。

我应该提到的是,我以前从未尝试过这一点,这些都是基于我对 Keycloak 类似的事情是如何完成的以及阅读他们的文档的经验。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keycloak 自定义声明:您可以在查询外部数据库时在运行时添加参数吗 的相关文章

  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • Spring Data Jpa OneToMany 同时保存子实体和父实体?

    这是我的父实体 注意 为了简洁起见 删除了 getter setter lombok 注释 Entity public class Board Id GeneratedValue strategy GenerationType IDENTI
  • 传递自定义类型查询参数

    如何接受自定义类型查询参数 public String detail QueryParam request final MYRequest request 上面的行在启动服务器时出现错误 jersey server model ModelV
  • Google 表格使用 API 密钥而不是 client_secret.json

    In the QuickStart java示例Java 快速入门 https developers google com sheets api quickstart java他们使用OAuth client ID识别该应用程序 这会弹出一
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 如何获取 JDBC 中 UPDATE 查询影响的所有行?

    我有一项任务需要使用更新记录PreparedStatement 一旦记录被更新 我们知道更新查询返回计数 即受影响的行数 但是 我想要的不是计数 而是受更新查询影响的行作为响应 或者至少是受影响的行的 id 值列表 这是我的更新查询 UPD
  • Spring Security 角色层次结构不适用于 Thymeleaf sec:authorize

    我正在使用 Spring Security 3 2 5 RELEASE 和 ThymeLeaf 2 1 4 RELEASE 我已经在安全上下文中定义了角色层次结构 在我的视图层中我正在使用sec authorize属性来定义菜单项 我希望看
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 添加 char 和 int

    据我了解 字符是一个字符 即一个字母 一个digit 标点符号 制表符 空格或类似的东西 因此 当我这样做时 char c 1 System out println c 输出 1 正是我所期望的 那么为什么当我这样做时 int a 1 ch
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • ebean 映射到 BYTEA 的数据类型是什么?

    我有一个游戏 2 0 2 需要在数据库中存储一些文件的应用程序 我们使用 Ebean 作为 ORM 我相信我的数据库中需要一个 BYTEA 列来存储该文件 但我不确定在我的模型中使用什么数据类型 我应该使用某种Blob 或者只是一个byte
  • FragmentMap + ActionBar 选项卡

    我一直在尝试插入一个MapView进入一个ActionBar Tab 但我什至无法解决问题 即使谷歌搜索 这是主要活动 Override public void onCreate Bundle savedInstanceState supe
  • JPA ManyToMany 产生的空联接表

    我有一个应用程序 其中我尝试使用 Hibernate 作为 JPA 提供程序来实现两个实体之间的多对多关系 我正在尝试的例子是一个单向的 其中一个相机可以有多个镜头 而镜头可以安装到多个相机中 以下是我的实体类 只需粘贴其中的相关部分 Ca

随机推荐

  • 如何在一个 ggplot 中绘制 S&P 500 和苏富比时间序列?

    我正在使用 quantmod 包下载 S P 500 时间序列和苏富比股票 library zoo library tseries library quantmod library ggplot2 env1 new env getSymbo
  • VBox 共享文件夹中符号链接的 Windows 问题

    我在 Virtual Box 上有一个 Ubuntu 17 虚拟机 我的主机操作系统是 windows 8 1 我在主机和来宾操作系统之间创建了一个共享文件夹 现在 因为windows不支持symlinks https en wikiped
  • 优化 SQL 查询

    我目前正在开发一个内容管理系统 我想听听您对以下方面的想法 我有一张桌子 page 我们假设它看起来像这样 ID Title Content 1 Test This is a test 除此之外 我还有一个page option表 这样我可
  • 如何使用 Reflection.Emit 创建多维数组

    我想使用 Reflection Emit 创建一个多维数组并设置它的元素 就像下面的C 代码 int nums new int 2 2 nums 1 1 2 并转成IL代码 IL 0000 nop IL 0001 ldc i4 2 IL 0
  • 在 Android 设备上使用 CCV

    有人尝试过在 Android 上使用 libccv 吗 我在网上找不到任何示例代码 想知道如何使用 CCV 在 Android 应用程序中实现跟踪器 这包括执行以下操作 处理来自 Android 设备相机的图像 在设备屏幕上显示经过CCV处
  • WPF TextBlock 在多行上显示字符串

    我有一个字符串 Item A r nItem B r nItem C 如何将此字符串绑定到 TextBlock 以便它显示为 Item A Item B Item C Thanks 只需使TextBlock大到足以显示三行 TextBloc
  • C#-R 接口

    我需要将 R 连接到某些 C 应用程序 我安装了rscproxy 1 3 and R Scilab DCOM3 0 1B5添加了 COM 引用STATCONNECTORCLNTLib StatConnectorCommonLib and S
  • jQuery:如何触发悬停?

    如何触发第二个悬停功能 adm1n toolbar hover function function adm1n toolbar content select change function e adm1n toolbar trigger m
  • 使用这个关键字来继承? [复制]

    这个问题在这里已经有答案了 可能的重复 scala 自我类型和特征子类有什么区别 https stackoverflow com questions 1990948 what is the difference between scala
  • 无法从日期列进行测量

    我正在尝试计算 completionDate 列中的日期与今天之间的天数 表名称为 事件 2 我有一个名为 事件 的模拟器表 它正在工作 代码 DaysClosed DATEDIFF Incidents 2 completionDate D
  • 在 matplotlib 中绘制 pandas 日期

    我有一个包含日期的固定宽度数据文件 但是当我尝试绘制数据时 日期未在 x 轴上正确显示 我的文件看起来像 2014 07 10 11 49 14 377102 45 2014 07 10 11 50 14 449150 45 2014 07
  • 当复选框控件的 Visible 变为 true 时 comctl32.dll 使用过多内存

    我在 C NET 应用程序运行时向 Windows 窗体添加控件 这些控件中的每一个都与特定信号交互 并使用该信号中的一些数据 信号名称 描述 来源 单位 值等 这些控件上有一个复选框 当其中一个信号的复选框的 Visible 属性变为 t
  • 使用 ggplot2 中的 geom_area() 为雷达图中的区域着色

    在继续阅读之前 我建议您下载并查看原始代码这个问题发布在这个论坛 https stackoverflow com questions 50353923 generate radar charts with ggplot2 noredirec
  • 是否可以明确识别 DML 命令是否是从存储过程发出的?

    我继承了一个 SQL Server 2008 数据库 调用应用程序可以通过存储过程访问该数据库 数据库中的每个表都有一个影子审计表 其中记录了插入 更新 删除操作 填充审计表的性能测试表明 使用插入审计记录OUTPUT子句比使用触发器快 2
  • 如何在 Xamarin.Forms 中根据 ListView 滚动方向显示和隐藏 StackLayout?

    我有一个屏幕ListView显示评论集合 另外 我有一个StackLayout与末端重叠ListView 其中有一个Entry and a Button添加新评论 我想隐藏 显示这个StackLayout取决于ListView滚动方向 如果
  • ftp_put():无法打开该文件:没有这样的文件或目录

    我在互联网上搜索了很多 但没有找到解决方案 我需要通过 PHP 将文件上传到 FTP 服务器 我测试了各种 PHP 脚本 如下所示 但我总是收到相同的问题 我尝试使用绝对路径 正常路径和其他路径 连接的警告 ftp put 无法打开该文件
  • 如何在 Flutter 中使用 Razorpay Orders API?

    我正在我的 flutter 应用程序中实现支付网关 所以 Razorpay 推荐我使用 Orders API 但我没有任何方法来实现 Orders API 我参考了以下文档 它包含 java PHP 等的示例 但没有找到 Flutter D
  • 错误:pnpm monorepo 工作空间内的子模块 git init 后,“请求 url * 超出 Vite 服务允许列表”

    我已经设置了一个 pnpm 工作区 其中包含许多我添加为 git 子模块的项目 之前工作的 Nuxt 项目突然开始出现错误The request url is outside of Vite serving allow list对于多个文件
  • 在postgresql中,分区还是多个数据库更有效?

    有一个应用程序 许多公司在其中发布信息 每个公司的数据都是独立的 没有数据重叠 从性能角度来看 最好是 在每个表的每一行上保留公司 ID 并让每个索引都使用它 根据公司ID对每个表进行分区 分区并创建一个用户来访问每个公司以确保安全 创建多
  • Keycloak 自定义声明:您可以在查询外部数据库时在运行时添加参数吗

    目的 我想根据传递给 keycloak 自定义实现的某些字段获取自定义声明 该字段位于应用程序内部 不存在于 keycloak 中 我正在努力在春季将遗留应用程序迁移到 keycloak 进行身份验证 但我们希望继续使用现有应用程序的授权