首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Keycloak使用自定义协议映射程序从数据库/外部源添加额外的声明

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

Stack Overflow用户
提问于 2018-10-31 18:20:17
回答 1查看 12.8K关注 0票数 17

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

Keycloak从数据库/外部源添加额外索赔

如何在密钥披风中注册自定义ProtocolMapper?

这里是他们的解决方案的概述,如果有更多的细节,可以帮助其他人。

过程期望 https://stackoverflow.com/questions/43376233/keycloak-add-extra-claims-from-database-external-source

  1. 用户登录
  2. 调用我的自定义协议映射器,其中覆盖transformAccessToken方法
  3. 在这里,我将协议映射器作为服务登录到keycloak中。这里不要忘记使用另一个客户端ID,而不是您正在构建协议映射器的那个,否则您将输入一个没完没了的递归。
  4. 我将访问令牌输入到协议映射器中,并调用应用程序的其他端点来获取额外的请求,这是安全的。
  5. 获取端点返回的信息,并将其添加为额外声明。

实现它的步骤 https://stackoverflow.com/questions/50523816/how-to-register-a-custom-protocolmapper-in-keycloak?noredirect=1&lq=1

实现ProtocolMapper接口并添加包含对类的引用的文件ProtocolMapper。 此时,Keycloak认识到了新的实现。您应该能够通过管理控制台配置它。 若要向令牌添加一些数据,请添加以下接口 org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper 并根据接口实现了这些方法。 然后添加具有以下内容的文件“META/jbos-Deployment-structure.xml”,并在完成所有这些操作后,在对http://:/auth/realms/testrealm/protocol/openid-connect/token的每个请求中调用自定义的http://:/auth/realms/testrealm/protocol/openid-connect/token()方法。

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

  1. 如何“实现ProtocolMapper”?
  2. 您在哪里添加前面提到的文件?(在我的Keycloak安装文件夹中看不到任何META/目录)
  3. 如何在何处“添加以下接口”?
  4. 定制的transformAccessToken()是什么样子的?

谢谢大家抽出时间。如果我错过了他们的答案,请告诉我。

编辑:

我希望有人能给我一些详细的步骤,说明如何在Keycloak 3.4.3 (对非Java开发人员来说足够详细)中从数据库中添加额外的声明。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 22:35:34

我希望这个一步步的指南能帮助你。

我使用Keycloak 4.5.0 -因为我安装了这个较新的版本-但我不应该有很大的区别。我在这个例子中实现了一个OIDCProtocolMapper

简单地总结一下--对于其他人的快速概述--后面将对每一步进行更详细的描述。

  1. 您实现了基于CustomProtocolMapper的AbstractOIDCProtocolMapper
  2. META/services文件名为org.keycloak.protocol.ProtocolMapper,必须可用,并包含映射程序的名称
  3. jboss-deployment-structure.xml需要可用,才能使用类中内置的keycloak
  4. Jar文件部署在/opt/jboss/keycloak/standalone/deployments/

好的,现在更详细:-)

创建自定义Mapper

我上传了我的maven pom.xml (pom) --只要将它导入到您的IDE中,所有的依赖项都会自动加载。这些依赖项只是provided,稍后将在运行时直接从keycloak中使用。

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

现在,我创建了一个名为CustomOIDCProtocolMapper的定制协议Mapper类。查找“完整”代码这里

它应该扩展AbstractOIDCProtocolMapper,并且需要实现所有的抽象方法。也许您想要一个SAML,然后它是另一个基类(AbstractSAMLProtocolMapper)

一个相关的方法是transformAccessToken --在这里,我对AccessToken设置了一个额外的声明。你需要你的逻辑,但是的-取决于你的数据库,等等;-)

服务档案

服务文件是重要的,用于查找您的自定义实现

将文件与fileName org.keycloak.protocol.ProtocolMapper放在\src\main\resources\META-INF\services\中。

在这个文件中,您将写入自定义提供程序的名称-因此keycloak知道这个类可以作为协议映射程序使用。

在我的示例中,文件内容只是一行

代码语言:javascript
运行
复制
com.stackoverflow.keycloak.custom.CustomOIDCProtocolMapper

部署结构XML

在您的自定义映射器中,您使用来自keycloak的文件。为了使用它们,我们需要将这种依赖性告知jboss。因此,在jboss-deployment-structure.xml内容中创建一个文件\src\main\resources\META-INF\

代码语言:javascript
运行
复制
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="org.keycloak.keycloak-services" />
        </dependencies>
    </deployment>
</jboss-deployment-structure>

构建和部署扩展程序

构建扩展名jar文件(mvn clean package) --并将jar放置在/opt/jboss/keycloak/standalone/deployments/中并重新启动密钥披风

在日志文件中,您应该看到它何时部署,以及(希望没有)错误消息。

现在您可以使用映射器了--在我的示例中,我可以在keycloak管理ui中创建一个mapper,并从下拉列表中选择Stackoverflow Custom Protocol Mapper

正如信息-这不是完全官方支持的keycloak所以接口可能会改变在以后的版本。

我希望这是可以理解的,你将能够成功地实现你自己的地图

编辑:导出的eclipse文件结构zip

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53089776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档