Keycloak создать настраиваемый сопоставитель поставщика удостоверений

У меня есть поставщик открытых идентификаторов, и я использую этого поставщика в качестве брокера идентификации keycloak. Я хочу сопоставить роли (утверждения), которые отправлены от брокера к keycloak (и keycloak отправит сопоставленные роли в своем jwt). Я хочу знать, как реализовать и добавить настраиваемый сопоставитель в keycloak (например, hardcodedmapper, attributemapper в keycloak). Я могу это сделать? Спасибо


person Batuhan    schedule 05.10.2017    source источник
comment
comment
Пожалуйста, не задавайте вопросы дважды. Вы можете отредактировать свой вопрос или что-то еще, если вы обнаружите, что ответ занимает много времени, спросите в почтовой рассылке пользователя keycloak.   -  person Xtreme Biker    schedule 07.10.2017
comment
Есть ли у кого-нибудь решение или предложение по этому поводу?   -  person Batuhan    schedule 08.10.2017
comment
Используйте настраиваемый сопоставитель, который обращается к вашей службе и извлекает дополнительную информацию с помощью REST API, подключения к БД или аналогичного. Затем добавьте информацию в свой токен, прежде чем он будет закодирован initToken или аналогичным методом в вашем настраиваемом картографе.   -  person Xtreme Biker    schedule 08.10.2017
comment
@Xtreme Biker спасибо за ответ, настраиваемый сопоставитель означает, что сопоставитель поставщика удостоверений на keycloak, не так ли, как я могу реализовать и добавить настраиваемый сопоставитель в keycloak?   -  person Batuhan    schedule 09.10.2017
comment
Да, это так. У вас есть несколько примеров github.com/keycloak/keycloak/tree/master/services/src/main/java/   -  person Xtreme Biker    schedule 09.10.2017
comment
@Xtreme Biker: да, я видел эти исходные коды, я буду реализовывать такой маппер, но как я могу добавить (импортировать) этот пользовательский маппер в keycloak в качестве типа маппера,   -  person Batuhan    schedule 09.10.2017
comment
Нет никого, кто мог бы объяснить, как добавить или импортировать пользовательскую реализацию mapper в приложение keycloak?   -  person Batuhan    schedule 10.10.2017


Ответы (2)


Создайте свой новый класс provider, я расширил существующий класс org.keycloak.broker.saml.mappers.AttributeToRoleMapper.

При создании jar убедитесь, что у вас есть папка с именем services внутри jar, папка META-INF.

В этой папке создайте простой текстовый файл с именем org.keycloak.broker.provider.IdentityProviderMapper, в этот файл добавьте полное имя вашего нового класса провайдера, то есть package.Classname.

После компиляции поместите файл в папку провайдеров под корневой папкой Keycloak. Перезагрузите контейнер.

person Tony Harris    schedule 30.01.2018
comment
Здравствуйте, спасибо за ответ. Есть ли примерный блок кода или образец класса поставщика (и / или проекта). Во-первых, я создам java-библиотеку, и я расширю класс org.keycloak.broker.saml.mappers.AttributeToRoleMapper, а затем я построю его и отпущу это keycloak_root / provider. я прав? Я не совсем понимаю, пожалуйста, объясните это предложение. При создании jar убедитесь, что у вас есть папка с именем services внутри jar, папка META-INF. - person Batuhan; 01.02.2018

Мне пришлось сделать что-то немного другое, чтобы мой пользовательский картограф работал с последней версией 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/resources (одна вверх от 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>
    
person Mark    schedule 04.01.2019
comment
Я делаю нечто подобное, куда ты роняешь банку? Я не могу заставить его отображаться в keycloak, хотя когда я проверяю автономность / развертывание, моя банка отображается как развернутая - person kronolynx; 14.05.2019
comment
Ваша банка должна находиться в /opt/jboss/keycloak/standalone/deployments/yourcode.jar - person Mark; 14.05.2019