【问题标题】:How to map third party IdP SAML attributes to my local application roles using keycloak-saml adapter如何使用 keycloak-saml 适配器将第三方 IdP SAML 属性映射到我的本地应用程序角色
【发布时间】:2020-04-01 18:25:22
【问题描述】:

我的设置是:

  • EAP 6.4.18
  • keycloak-saml 适配器
  • 第三方 IdP 服务器(不是 keycloak 服务器)

我正在尝试保护 EAR 中的其中一个 Web 应用程序。目前我的standalone.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 返回的角色不匹配。

如何配置这两者之间的角色映射,以便用户在会话中拥有正确的角色?

泰。

注意:

我已经用 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"...

【问题讨论】:

    标签: authentication jboss keycloak saml idp


    【解决方案1】:

    这是我缺少的配置:

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

    “properties-based-role-mapper”的实现类为:org.keycloak.adapters.saml.PropertiesBasedRoleMapper

    更多信息在这里:https://www.keycloak.org/docs/latest/securing_apps/#_saml-general-config

    问题是我正在查看不提供该选项的架构版本 1.1。 1.3 版可以,完美运行。

    我希望这个问题/答案对那里的人有所帮助。

    干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 2019-01-19
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多