1

我有一个开放的 id 提供者,我使用这个提供者作为 keycloak 的身份代理。我想将从代理发送到 keycloak 的角色(声明)映射(并且 keycloak 将在其 jwt 中发送映射的角色)。我想知道如何实现自定义映射器并将其添加到 keycloak(如硬编码映射器、keycloak 中的属性映射器)。我可以这样做吗?谢谢

4

2 回答 2

5

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

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

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

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

于 2018-01-30T16:03:09.830 回答
3

为了让我的自定义映射器与最新版本的 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文件夹下,创建一个名为. 根据您所做的工作,您需要在此处添加适当的 JBoss 模块。对于我的简单测试映射器,我使用了:src/main/resourcesservicesjboss-deployment-structure.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
        <deployment>
            <dependencies>
                <module name="org.keycloak.keycloak-services" />
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    
于 2019-01-04T08:36:07.053 回答