当前位置: 首页 > 知识库问答 >
问题:

Keycloak使用自定义协议映射器从数据库/外部源添加额外声明

汲永嘉
2023-03-14

我已经看到了这两篇文章,它们给出了这个问题的解决方案,但对于像我这样的非Java开发人员来说,它们没有提供足够详细的信息:

Keycloak从数据库/外部源添加额外声明

如何在KeyCloak中注册自定义ProtocolMapper?

    null

实现ProtocolMapper接口并添加包含类引用的文件“Meta-INF/Services/org.keycloak.protocol.ProtocolMapper”。

此时,Keycloak识别新的实现。您应该能够通过管理控制台配置它。

要向令牌添加一些数据,请添加以下接口

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-services"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

在完成所有这些操作之后,每个请求都会调用自定义transformAccessToken()方法,其URL为http://://auth/realms/testrealm/protocol/openid-connect/token

读完这篇文章后,我有几个问题:

  1. 如何“实现ProtocolMapper”
  2. 您在哪里添加前面提到的文件?(在我的Keycloak安装文件夹中看不到任何META-INF/目录)
  3. 如何以及在何处“添加下列接口”
  4. 自定义transformAccessToken()看起来像什么

编辑2这里描述的一个方法可以做到这一点,但缺乏细节。Keycloak创建自定义标识提供程序映射器

共有1个答案

仲孙子辰
2023-03-14

我希望这一步一步指南对你有所帮助

我使用的是Keycloak 4.5.0--因为我安装了这个较新的版本--但我应该不会有太大的不同。我在示例中实现了OIDCProtocolMapper

只是为了总结一下--为其他人提供快速概述--后面将更详细地描述每个步骤

我上传了我的html" target="_blank">mavenpom.xml(pom)--只需将其导入IDE中,所有的依赖项都将自动加载。这些依赖项只是提供的,稍后将在运行时直接从keycloak中使用

与此相关的是keycloak.version属性-所有keycloak依赖项当前都加载在版本4.5.0中。final

现在,我创建了一个名为CustomoIDCProtocolMapper的自定义协议映射器类。在这里找到“完整”代码

服务文件对于keycloak查找自定义实现非常重要

将文件名为org.keycloak.protocol.protocolmapper的文件放置在\src\main\resources\meta-inf\services\

在这个文件中,您可以写入自定义提供者的名称--因此keycloak知道这个类可以作为协议映射器使用
在我的示例中,文件内容只有一行

com.stackoverflow.keycloak.custom.CustomOIDCProtocolMapper
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-services" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

现在可以使用映射器了--在我的示例中,我可以在keycloak管理ui中创建映射器,并从下拉菜单中选择StackOverflow Custom Protocol mapper

就像信息一样--这不是keycloak完全官方支持的--所以界面可能会在以后的版本中发生变化

我希望这是可以理解的,并且您将能够成功地实现您自己的映射器

 类似资料:
  • 我在这里看到了一些例子:http://docs.oracle.com/javase/7/docs/api/javax/swing/joptionpane.html 它似乎表明我应该用一个自定义的按钮列表来替换我的组合框,这不是我想要的。我需要有3个按钮(好的,跳过,取消),以及项目列表。 更新:为了说明我的GUI应该是什么样子: null 目前我的代码如下所示: 灵感来自:Java:showInp

  • 这是网站中的一个常见功能,用户可以自定义其报告(他们可以选择数据库表中要在其报告中显示的列名,如https://i.stack.imgur.com/GxOGz.jpg). 我知道如何在SQL server中使用Select语句来查找列的系统属性(如column\u name、data\u type、length等),但是,如何为数据库列添加额外的自定义属性(如is\u visible、owner、

  • 问题内容: 我们的应用程序当前使用的数据源是在JBoss standalone.xml中定义的,基本上我们需要在应用程序而不是容器中定义它。我们当前的设置是; application-context.xml; persistance.xml: datasource.xml: 基本上我想要的只是生产线 从datasource.xml读取而不是转到容器(JBoss)。看起来似乎很简单,但是在阅读了一些

  • 我在我的Minecraft客户端中有一个函数,它需要一个外部库。我在IDE中添加了它,并将其添加到lib/文件夹中,但它没有帮助。有人对此有经验吗?它们是两个罐子。

  • 问题内容: 我正在使用maven构建可执行的jar文件,这意味着您可以使用“ java -jar file.jar”运行它。 我想依靠用户定义的属性(只是一个包含键/值的文件),在开发阶段,我将“ user.properties”文件放在maven / src / main / resources /文件夹中。 我的属性文件已加载: 现在,我想将该文件保留在JAR之外,并具有以下内容: 我尝试使用

  • 有一个事件处理方法定义如下: 正常的订阅处理: 目前我的需求是需要在处理事件的时候需要多填一个参数,如string name之类的该如何做呢? 楼主不了解c#,只是目前有一个需求需要调用dll,故采用c#来写。好在c#和java还是比较像的,之前只在c语言中文网看了两个小时教程,就上手实现功能了,一般语法没问题,但是稍微高级一点的语法感觉就不知道该怎么弄了,求教