Keycloak创建自定义身份提供者映射器

时间:2017-10-05 22:00:08

标签: jboss keycloak jboss-tools jboss-eap-7 keycloak-services

我有一个开放的id提供程序,我使用此提供程序作为keycloak的身份代理。我想映射从代理发送到keycloak的角色(声明)(keycloak将在其jwt中发送映射角色)。我想知道如何实现并向keycloak添加自定义映射器(如hardcodedmapper,keycloak中的attributemapper)。我能这样做吗?感谢

2 个答案:

答案 0 :(得分:4)

创建新的provider类,我扩展了现有的org.keycloak.broker.saml.mappers.AttributeToRoleMapper类。

构建jar时,请确保在jar,META-INF文件夹中有一个名为services的文件夹。

在此文件夹中创建一个名为org.keycloak.broker.provider.IdentityProviderMapper的简单文本文件,在该文件中添加新提供者类的全名,即package.Classname

编译完成后,将文件放在Keycloak根文件夹下的providers文件夹中。重启容器。

答案 1 :(得分:2)

为了使我的自定义映射器可以使用最新版本的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

  • org.keycloak.protocol.ProtocolMapper目录中创建一个名为META-INF/services的文件。它的内容应该只有一行,其中包含您的自定义映射器的完全限定的类名称:

    com.test.MyTestMapper
    
  • META-INF(从src/main/resourcesservices的{​​{1}}文件夹下,创建一个名为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>