Jboss KeyClope创建自定义身份提供程序映射器

Jboss KeyClope创建自定义身份提供程序映射器,jboss,keycloak,jboss-tools,jboss-eap-7,keycloak-services,Jboss,Keycloak,Jboss Tools,Jboss Eap 7,Keycloak Services,我有一个开放的id提供程序,我使用这个提供程序作为KeyClope的身份代理。我想将从代理发送的角色(声明)映射到keydepeat(keydepeat将在其jwt中发送映射角色)。我想知道如何实现一个自定义映射器并将其添加到KeyClope(如KeyClope中的hardcodedmapper、attributemapper)。我能做这个吗?感谢您创建新的提供者类,我扩展了现有的org.keydove.broker.saml.mappers.AttributeToRoleMapper类 在构建

我有一个开放的id提供程序,我使用这个提供程序作为KeyClope的身份代理。我想将从代理发送的角色(声明)映射到keydepeat(keydepeat将在其jwt中发送映射角色)。我想知道如何实现一个自定义映射器并将其添加到KeyClope(如KeyClope中的hardcodedmapper、attributemapper)。我能做这个吗?感谢您创建新的
提供者
类,我扩展了现有的
org.keydove.broker.saml.mappers.AttributeToRoleMapper

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

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


编译完成后,将该文件放到keydape根文件夹下的providers文件夹中。重新启动容器。

创建新的
提供程序
类,我扩展了现有的
org.keydape.broker.saml.mappers.AttributeToRoleMapper

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

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


编译完成后,将该文件放到keydape根文件夹下的providers文件夹中。重新启动您的容器。

为了让我的自定义映射器使用最新版本的KeyClope(撰写本文时为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.keydape.ProtocolMapper
    的文件。其内容应仅为一行,其中包含自定义映射器的完全限定类名:

    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>
    
    
    

为了让我的自定义映射器能够使用最新版本的KeyClope(撰写本文时为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.keydape.ProtocolMapper
    的文件。其内容应仅为一行,其中包含自定义映射器的完全限定类名:

    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>
    
    
    

可能重复的问题,请不要发布两次问题。您可以编辑您的问题或其他内容,如果您发现需要很长时间才能回答,请在KeyClope用户邮件列表中提问。是否有任何解决方案或建议?使用自定义映射器访问您的服务,并使用REST API、DB连接或类似工具检索额外信息。然后在您的代币在自定义映射器中编码之前将信息添加到代币中。@Xtreme Biker感谢您的回答,自定义映射器意味着KeyClope上的身份提供程序映射器,不是吗?我如何实现并将自定义映射器添加到KeyClope?可能是重复的,请不要发布两次问题。您可以编辑您的问题或其他内容,如果您发现需要很长时间才能回答,请在KeyClope用户邮件列表中提问。是否有任何解决方案或建议?使用自定义映射器访问您的服务,并使用REST API、DB连接或类似工具检索额外信息。然后在自定义映射器中对令牌进行编码之前,将信息添加到令牌中。@Xtreme Biker感谢您的回答,自定义映射器意味着Key斗篷上的身份提供程序映射器,不是吗?我如何实现并将自定义映射器添加到Key斗篷?您好,谢谢您的回答。是否有一个示例代码块或示例提供程序类(and或project。)首先,我将创建一个java库,并扩展“org.keydepot.broker.saml.mappers.AttributeToRoleMapper”类,然后构建它并将其放到keydepot\u根/提供程序。我说得对吗?我不太明白,请解释这句话“在构建jar时,确保在jars中有一个名为services的文件夹,META-INF文件夹。”您好,谢谢您的回答。是否有一个示例代码块或示例提供程序类(and或project。)首先,我将创建一个java库,并扩展“org.keydepot.broker.saml.mappers.AttributeToRoleMapper”类,然后构建它并将其放到keydepot\u根/提供程序。我说得对吗?我不太明白,请解释这句话“在构建jar时,请确保在jar中有一个名为services的文件夹,META-INF文件夹。”我正在做类似的事情,您将jar放在哪里?我无法让它显示在keydepot中,即使当我检查standalone/deployments时,我的jar显示为deployed您的jar应该在/opt/jboss/keydeport/standalone/deployments/yourcode中