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 自定义声明:您可以在查询外部数据库时在运行时添加参数吗 的相关文章

  • 有没有更简单的方法来分割/重建字符串?

    目前我正在使用String split 像这样 String tmp props get i getFullName split String name for int j 1 j lt tmp length j if j gt 1 nam
  • Spring安全+LocaleResolver

    我需要在身份验证成功后更改区域设置 区域设置解析器
  • 使用 JavaScript 与 Web 服务器通信的 Applet 是否可以迁移到 JWS?

    只是分享一些信息 希望对社区有用 由于各种浏览器停止支持插件 Applet 的可用性已经下降 Google 已决定停止对 NPAPI 插件的支持 EDGE 不支持插件 Firefox 也不鼓励使用插件 Mozilla 可能会跟进该套件 我们
  • 如何在JavaFX中有效地滚动和缩放大图像?

    作为图像处理应用程序的一部分 我需要创建具有缩放 滚动和矢量叠加功能的简单查看器模块 图像相当大 40000x20000 这使得 ImageView 上的操作变慢 缓冲等 在 JavaFX 中处理巨大图像时 改善用户体验的最佳选项是什么 我
  • Java:while循环冻结程序

    我正在制作一个游戏 我需要每 3 秒更新一次 JProgressBar 为此 我使用 while 循环 问题是我的程序由于 while 循环而冻结 我在其他问题中读到它 他们没有帮助我解决这个问题 我不知道如何解决 这是我的代码 publi
  • 有没有办法让Maven自动下载快照版本?

    所以我有一个项目依赖于另一个项目的快照版本 依赖关系是
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • NIO 直接缓冲区何时以及如何被释放?

    我有一个 C 库 需要一个临时缓冲区作为暂存空间 我正在考虑将直接字节缓冲区的地址传递给它 在最终释放缓冲区之前 是否允许虚拟机重新定位缓冲区 JNI 框架消失后 本机库将保留该指针 我的理解是 JNI 本地对象引用无法缓存 因为 VM 可
  • Java 8 Stream - 并行执行 - 不同的结果 - 为什么?

    假设我有一个List
  • java.lang.ClassNotFoundException: org.jboss.logging.Logger

    我有一个奇怪的问题 我有一个JMS https en wiktionary org wiki JMS客户端应用程序和MDB https en wikipedia org wiki Enterprise JavaBeans Message d
  • 不使用 length() 方法的字符串长度[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在不使用字符串的情况下找到字符串的长度length String类的方法 str toCharArray length应该管用 或者怎么
  • java中永远不会出现的异常

    我为点和向量编写一个类 我想用它们来计算向量的点和范数 这些是点类和向量类 public class Point public float x y public class MyVector public Point start end 我
  • 在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?

    有人能够在 SMX4 中的两个或多个捆绑包之间成功共享配置吗 我正在寻找的是这样的 有一个文件 SMX HOME etc myconfiguration cfg 使此配置 可用 以便使用 Spring dm 通过 OSGi 配置管理将其注入
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • 带等待/通知的同步块与不带等待/通知的同步块之间的区别?

    如果我只是使用synchronized 不是wait notify方法 它仍然是线程安全的吗 有什么不同 Using synchronized使方法 块一次只能由一个线程访问 所以 是的 它是线程安全的 这两个概念是结合在一起的 而不是相互
  • “强制更新快照/版本” - 这是什么意思

    在 Maven 项目中 选择 更新项目 时 有一个名为 强制更新快照 版本 的选项 它有什么作用 强制更新快照 版本 就像运行以下命令 mvn U install U 也可以用作 update snapshot 看here http boo
  • 短 2 个字节

    我正在从串行端口读取一个长度为 133 字节的数据包 最后 2 个字节包含 CRC 值 我使用 Java 将 2 个字节值制成单个 我认为很短 这就是我所做的 short high 48 0x00ff short low 80 short
  • Web 服务客户端的 AXIS 与 JAX-WS

    我决定用Java 实现Web 服务客户端 我已经在 Eclipse 中生成了 Axis 客户端 并使用 wsimport 生成了 JAS WS 客户端 两种解决方案都有效 现在我必须选择一种来继续 在选择其中之一之前我应该 考虑什么 JAX
  • 在Java内存管理中,“PS”代表什么?

    每当我看到 Java 中对内存的引用时 各种空格总是以 PS 为前缀 PS 是什么意思 它开始困扰我 到目前为止我唯一的猜测是 泳池空间 但这将是多余的 例子 PS伊甸园空间 PS 幸存者空间 PS 终身空间 老一代 PS Perm Gen
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList

随机推荐

  • 如何在一个 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 进行身份验证 但我们希望继续使用现有应用程序的授权