我已经看到这两个帖子给出了这个问题的解决方案,但是他们没有提供关于如何为像我这样的非Java开发人员这样做的详细信息:
如何在Keycloak中注册自定义ProtocolMapper?
以下是他们的解决方案的概述,如果有更多细节,可以帮助其他人.
从第一个链接预期的过程
- 用户登录
- 调用我的自定义协议映射器,其中我覆盖transformAccessToken方法
- 在这里,我将协议映射器所在的客户端登录到keycloak中作为服务.这里不要忘记使用另一个客户端ID而不是您正在构建协议映射器的客户端ID,否则您将输入无限递归.
- 我将访问令牌放入协议映射器中,然后调用应用程序的其余端点来获取额外的声明,这是有保证的.
- 获取端点返回的信息并将其添加为额外声明
从第二个链接实现它的步骤
实现ProtocolMapper接口并添加包含对类的引用的文件 "META-INF/services/org.keycloak.protocol.ProtocolMapper".
此时Keycloak认识到新的实现.您应该能够通过管理控制台进行配置.
要向令牌添加一些数据,请添加以下接口
org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper
并根据接口实现方法
然后使用以下内容添加文件" META-INF/jboss-deployment-structure.xml "
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.keycloak.keycloak-services"/> </dependencies> </deployment> </jboss-deployment-structure>完成所有这些后,每次对URL http://:/ auth/realms/testrealm/protocol/openid-connect/token的请求都会调用自定义transformAccessToken()方法
看完之后我有几个问题:
谢谢大家的时间.如果我错过总结他们的答案,请告诉我.
编辑:
我开始获得赏金,希望有人能够在Keycloak 3.4.3中为我提供有关如何在数据库中添加额外声明的详细步骤(对于非Java开发人员来说足够详细)
编辑2 这里描述的方法可以做到这一点,但缺乏细节. Keycloak创建自定义身份提供者映射器
我无法理解我从应用程序数据库中添加额外声明的方式.鉴于我的理解有限,我看到两种方式:
我想要两条路径的反馈.我觉得第一种选择可能更安全.但是我不确定从哪里开始实施.