Как сопоставить сторонние атрибуты IdP IdP с моими локальными ролями приложения с помощью адаптера keycloak-saml - PullRequest
1 голос
/ 01 апреля 2020

Моя настройка:

  • EAP 6.4.18
  • адаптер keycloak-saml
  • Сторонний IdP-сервер (не сервер keycloak)

Я пытаюсь защитить одно из веб-приложений в EAR. В настоящее время мой автономный. xml выглядит так:

<subsystem xmlns="urn:jboss:domain:keycloak-saml:1.3">
    <secure-deployment name="myapp.war">
        <SP entityID="https://mydomain/myapp/" sslPolicy="EXTERNAL" nameIDPolicyFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" logoutPage="/logout.jsp" forceAuthentication="false" isPassive="false" turnOffChangeSessionIdOnLogin="false">
            <Keys>
                <Key signing="true" encryption="false">
                    <KeyStore password="pass" file="/path-to/keyStore.jks">
                        <PrivateKey alias="sp" password="pass"/>
                        <Certificate alias="sp"/>
                    </KeyStore>
                </Key>
            </Keys>
            <IDP entityID="...entityID...">
                <SingleSignOnService signRequest="true" validateResponseSignature="true" requestBinding="POST" bindingUrl="...sso dinding..." assertionConsumerServiceUrl="https://mydomain/myapp/saml"/>
                <SingleLogoutService validateRequestSignature="true" validateResponseSignature="true" signRequest="true" signResponse="true" requestBinding="POST" responseBinding="POST" postBindingUrl="...slo binding..." redirectBindingUrl="...redirect..."/>
                <Keys>
                    <Key signing="true" encryption="false">
                        <KeyStore password="pass" file="/path-to/keyStore.jks">
                            <Certificate alias="idp"/>
                        </KeyStore>
                    </Key>
                </Keys>
            </IDP>
        </SP>
    </secure-deployment>
</subsystem>

Эта часть работает просто отлично. Я перенаправлен на IdP и могу войти. Проблема в том, что мои роли приложений и роли, возвращенные IdP, не совпадают.

Как настроить сопоставление ролей между этими двумя так, чтобы у пользователя были правильные роли в сеансе?

Ty.

Примечание:

Я сделал что-то подобное с подсистемой picketlink. Ниже я использовал файл свойств для такого сопоставления. Я думал, что нечто подобное можно сделать с помощью адаптера keycloak, но схема «keycloak-saml: 1.1», похоже, не позволяет выбрать домен безопасности.

<security-domain name="my-realm">
<authentication>
    <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="optional">
        <module-option name="password-stacking" value="useFirstPass"/>
    </login-module>
    <login-module code="org.jboss.security.auth.spi.RoleMappingLoginModule" flag="optional">
        <module-option name="password-stacking" value="useFirstPass"/>
        <module-option name="rolesProperties" value="${jboss.server.config.dir}/rolesMapping-roles.properties"/>
        <module-option name="replaceRole" value="true"/>
    </login-module>
</authentication>

С подсистемой picketlink я мог выбрать свой домен безопасности, и произошло бы сопоставление ролей.

<service-provider name="myapp.war" security-domain="my-realm"...

1 Ответ

0 голосов
/ 04 апреля 2020

Это конфигурация, которую мне не хватало:

​<RoleMappingsProvider id="properties-based-role-mapper">
       ​<Property name="properties.file.location" value="/opt/mappers/roles.properties"/>
​</RoleMappingsProvider>

Класс реализации «ролевого сопоставления свойств»: org.keycloak.adapters.saml.PropertiesBasedRoleMapper

Больше информации здесь: https://www.keycloak.org/docs/latest/securing_apps/#_saml -general-config

Проблема заключалась в том, что я искал схему версии 1.1, которая не предоставляет эту опцию. Версия 1.3 работает, отлично работает.

Надеюсь, этот вопрос / ответ кому-нибудь поможет.

Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...