Ala*_*icB 9 java customization keycloak
我已经看到这两个帖子给出了这个问题的解决方案,但是他们没有提供关于如何为像我这样的非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创建自定义身份提供者映射器
Evi*_*unk 13
我希望这个一步一步的指南可以帮助你
我正在使用Keycloak 4.5.0 - 因为我安装了这个新版本 - 但我不应该有很大的不同.我OIDCProtocolMapper在示例中实现了一个.
总结一下 - 对于其他人的快速概述 - 后面将详细介绍每个步骤
您基于实现CustomProtocolMapper类
AbstractOIDCProtocolMapper
META-INF/services文件名org.keycloak.protocol.ProtocolMapper必须可用,并包含映射器的名称
jboss-deployment-structure.xml 需要可以使用内置类的keycloak
Jar文件部署在
/opt/jboss/keycloak/standalone/deployments/
好的,现在更多细节:-)
我上传了你的maven pom.xml(pom) - 只需将它导入你的IDE,所有的依赖项都应该自动加载.依赖关系只是provided 稍后将在运行时直接从keycloak使用
相关keycloak.version属性 - 所有keycloak依赖项当前都在版本中加载4.5.0.Final
现在我创建了一个名为的自定义协议映射器类CustomOIDCProtocolMapper.在这里找到"完整"代码
它应该扩展AbstractOIDCProtocolMapper并需要实现所有抽象方法.也许你想拥有一个SAML协议映射器然后它是另一个基类(AbstractSAMLProtocolMapper)
一个相关的方法是transformAccessToken- 在这里我为AccessToken设置了一个额外的声明.你需要你的逻辑,但是 - 取决于你的数据库等;-)
服务文件对于keycloak查找自定义实现非常重要
将一个文件的文件名 org.keycloak.protocol.ProtocolMapper中\src\main\resources\META-INF\services\
在这个文件里面你写了自定义Provider的Name - 所以keycloak知道这个类可用作协议映射器
在我的例子中文件内容只是一行
com.stackoverflow.keycloak.custom.CustomOIDCProtocolMapper
Run Code Online (Sandbox Code Playgroud)
在自定义映射器中,您可以使用keycloak中的文件.为了使用它们,我们需要告知jboss这种依赖性.因此jboss-deployment-structure.xml在\src\main\resources\META-INF\
Content中创建一个文件:
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services" />
</dependencies>
</deployment>
</jboss-deployment-structure>
Run Code Online (Sandbox Code Playgroud)
建立你的扩展(一个JAR文件mvn clean package) -并把jar中/opt/jboss/keycloak/standalone/deployments/,并重新启动keycloak
在日志文件中,您应该看到它何时部署并且(希望没有)错误消息
现在你可以使用你的映射器 - 在我的例子中,我可以在keycloak admin ui中创建一个Mapper并Stackoverflow Custom Protocol Mapper从下拉列表中选择
就像信息一样 - 这不是keycloak完全正式支持的 - 所以接口可能会在以后的版本中发生变化
我希望这是可以理解的,你将能够成功实现自己的映射器
编辑:导出的eclipse文件结构zip
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |