Keycloak 创建自定义身份提供程序映射器
Keycloak create a custom identity provider mapper
我有一个开放的 ID 提供者,我使用这个提供者作为 keycloak 的身份代理。我想映射从代理发送到 keycloak 的角色(声明)(并且 keycloak 将在其 jwt 中发送映射的角色)。我想知道如何实现自定义映射器并将其添加到 keycloak(如 hardcodedmapper、keycloak 中的 attributemapper)。我可以这样做吗?谢谢
创建新的 provider
class,我扩展了现有的 org.keycloak.broker.saml.mappers.AttributeToRoleMapper
class。
构建 jar 时,确保在 jar 中有一个名为 services 的文件夹,即 META-INF 文件夹。
在此文件夹中创建一个名为 org.keycloak.broker.provider.IdentityProviderMapper
的简单文本文件,在该文件中添加您的新提供商的全名 class,即 package.Classname
.
编译后将文件放入 Keycloak 根文件夹下的 providers 文件夹中。重新启动容器。
为了让我的自定义映射器与最新版本的 Keycloak(撰写本文时为 4.8)一起工作,我不得不做一些稍微不同的事情:
创建了一个扩展 AbstractOIDCProtocolMapper
:
的自定义映射器
package com.test;
import org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper;
public class MyTestMapper extends AbstractOIDCProtocolMapper {
...
}
在src/main/resources
中创建文件夹结构META-INF/services
在 META-INF/services
目录中创建一个名为 org.keycloak.protocol.ProtocolMapper
的文件。它的内容应该只有一行,包含自定义映射器的完全限定 class 名称:
com.test.MyTestMapper
在 src/main/resources
的 META-INF
文件夹下(services
上一个),创建一个名为 jboss-deployment-structure.xml
的文件。根据您的操作,您需要在此处添加适当的 JBoss 模块。对于我的简单测试映射器,我使用了:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.keycloak.keycloak-services" />
</dependencies>
</deployment>
</jboss-deployment-structure>
我有一个开放的 ID 提供者,我使用这个提供者作为 keycloak 的身份代理。我想映射从代理发送到 keycloak 的角色(声明)(并且 keycloak 将在其 jwt 中发送映射的角色)。我想知道如何实现自定义映射器并将其添加到 keycloak(如 hardcodedmapper、keycloak 中的 attributemapper)。我可以这样做吗?谢谢
创建新的 provider
class,我扩展了现有的 org.keycloak.broker.saml.mappers.AttributeToRoleMapper
class。
构建 jar 时,确保在 jar 中有一个名为 services 的文件夹,即 META-INF 文件夹。
在此文件夹中创建一个名为 org.keycloak.broker.provider.IdentityProviderMapper
的简单文本文件,在该文件中添加您的新提供商的全名 class,即 package.Classname
.
编译后将文件放入 Keycloak 根文件夹下的 providers 文件夹中。重新启动容器。
为了让我的自定义映射器与最新版本的 Keycloak(撰写本文时为 4.8)一起工作,我不得不做一些稍微不同的事情:
创建了一个扩展
的自定义映射器AbstractOIDCProtocolMapper
:package com.test; import org.keycloak.protocol.oidc.mappers.AbstractOIDCProtocolMapper; public class MyTestMapper extends AbstractOIDCProtocolMapper { ... }
在
src/main/resources
中创建文件夹结构META-INF/services
在
META-INF/services
目录中创建一个名为org.keycloak.protocol.ProtocolMapper
的文件。它的内容应该只有一行,包含自定义映射器的完全限定 class 名称:com.test.MyTestMapper
在
src/main/resources
的META-INF
文件夹下(services
上一个),创建一个名为jboss-deployment-structure.xml
的文件。根据您的操作,您需要在此处添加适当的 JBoss 模块。对于我的简单测试映射器,我使用了:<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="org.keycloak.keycloak-services" /> </dependencies> </deployment> </jboss-deployment-structure>