我已经看到这两个帖子给出了这个问题的解决方案,但是他们没有提供关于如何为像我这样的非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创建自定义身份提供者映射器
我需要在Keycloak中创建脚本映射器类型的协议映射器。该脚本应获取用户属性,检查其大小,并将其放在令牌上。我没有找到有关如何创建脚本的文档或示例。从我可以收集的点点滴滴中,我想我的脚本需要看起来像:
var value = user.getAttribute("myAttribute");
if (value.length > LIMIT) {
value = value.substring(0,LIMIT);
}
token.setOtherClaims("myAttribute",value);
Run Code Online (Sandbox Code Playgroud)