Keycloak 使用自定义协议映射器从数据库/外部源添加额外的声明
我看过这两篇帖子,它们给出了这个问题的解决方案,但它们没有提供足够详细的信息,说明如何为像我这样的非Java开发人员做到这一点:
以下是他们的解决方案的回顾,如果包含更多详细信息,可以帮助其他人。
从第一个链接预期的进程
- 用户登录
- 我的自定义协议映射器被调用,我在其中覆盖了 transformAccessToken 方法
- 在这里,我登录了协议映射器作为服务进入密钥保护的客户端。在这里,不要忘记使用另一个客户端ID而不是您正在为其构建协议映射器的客户端ID,否则您将输入无休止的递归。
- 我将访问令牌放入协议映射器中,并调用应用程序的其余终结点来获取额外的声明,这是受保护的。
- 获取终结点返回的信息,并将其添加为额外声明
从第二个链接实现它的步骤
实现 ProtocolMapper 接口并添加包含对该类的引用的文件 “META-INF/services/org.keycloak.protocol.ProtocolMapper”。
此时,Keycloak 识别新的实现。您应该能够通过管理控制台对其进行配置。
若要向令牌添加一些数据,请添加以下接口
org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper
并根据接口实现方法
然后添加包含以下内容的文件“META-INF/jboss-deployment-structure.xml”
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.keycloak.keycloak-services"/> </dependencies> </deployment> </jboss-deployment-structure>
完成所有这些操作后,在每次请求URL时都会调用自定义转换AccessToken()http://:/auth/realms/testrealm/protocol/openid-connect/token
读完这篇文章后,我有几个问题:
- 如何“实现协议映射器”
- 您在哪里添加前面提到的文件?(在我的Keycloak安装文件夹中看不到任何META-INF/目录)
- 如何以及在何处“添加以下接口”
- 自定义转换AccessToken() 是什么样的
谢谢大家抽出宝贵时间。让我知道,如果我错过了总结他们的答案。
编辑:
我正在开始赏金,希望有人能够给我详细的步骤,说明如何在Keycloak 3.4.3中从数据库中添加额外的声明(对于非Java开发人员来说足够详细)
编辑 2这里描述的方法可以做到这一点,但缺乏细节。密钥保护创建自定义身份提供程序映射器