我无法理解我从应用程序数据库中添加额外声明的方式.鉴于我的理解有限,我看到两种方式:
我想要两条路径的反馈.我觉得第一种选择可能更安全.但是我不确定从哪里开始实施.
我正在努力在 Keycloak 中注册自定义 ProtocolMapper。我想根据令牌请求从我的数据库中添加一些数据。所以我遵循Keycloak 中给出的想法从数据库/外部源添加额外的声明。
我实现了 ProtocolMapper 接口并添加了文件
META-INF/services/org.keycloak.protocol.ProtocolMapper
包含对我的班级的引用。到目前为止一切顺利,Keycloak 认可了新的实现。我也可以通过管理控制台配置它。
要将一些数据添加到令牌中,我想我还必须添加一个/一些接口
org.keycloak.protocol.oidc.mappers.UserInfoTokenMapper org.keycloak.protocol.oidc.mappers.OIDCIDTokenMapper org.keycloak.protocol.oidc.mappers.OIDCAccessTokenMapper
并根据接口实现方法。
现在的问题是,一旦我添加了接口,我就会收到以下日志消息:
08:55:07,292 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service jboss.deployment.unit."keycloak-spi.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit."keycloak-spi.jar".POST_MODULE
: WFLYSRV0153: Failed to process phase POST_MODULE of deployment "keycloak-spi.jar"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:172)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: Failed to link at/lotterien/jam/keycloak/spi/JamAuthorizationInfoProtocolMapper (Module "deployment.keycloak-spi.jar" from Service Module Loader): org/keycloak/protocol/oidc/mappers/UserInfoTokenMapper
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) …Run Code Online (Sandbox Code Playgroud) 扩展 Keycloak 的正确方法是什么——例如通过服务提供者接口 (SPI)——用从另一个服务获取的信息来丰富发布的 JWT 令牌,但不将用户凭据检查委托给另一个服务?
我有一个开放的 ID 提供程序,我使用该提供程序作为 keycloak 的身份代理。我想映射从代理发送到 keycloak 的角色(声明)(keycloak 将在其 jwt 中发送映射的角色)。我想知道如何实现自定义映射器并将其添加到keycloak(例如keycloak中的硬编码映射器、属性映射器)。我可以这样做吗?谢谢