配置 Shibboleth

您可以配置 Shibboleth 3.2x 和 3.3.x 作为您的身份提供者 (IDP),用于 SAML 中的 ArcGIS Enterprise 登录。 配置过程包含两个主要步骤:将 SAML IDP 注册到 ArcGIS Enterprise,以及将 ArcGIS Enterprise 注册到 SAML IDP。

注:

要确保安全配置 SAML 登录帐户,请参阅 SAML 安全性最佳实践

所需信息

当用户使用 SAML 登录帐户进行登录时,ArcGIS Enterprise 需要从 IDP 处接收某些属性信息。 NameID 属性为强制属性,并且必须由您的 IDP 在 SAML 响应中发送,才能使联合起作用。 由于 ArcGIS Enterprise 使用 NameID 的值唯一标识指定用户,因此建议使用常量值来唯一标识用户。 IDP 中的用户登录时,ArcGIS Enterprise 组织会在其用户存储中创建用户名为 NameID 的新用户。 NameID 发送的值中允许使用的字符包括字母数字、_(下划线)、.(点)和 @(at 符号)。 任何其他字符均会进行转义,从而在 ArcGIS Enterprise 创建的用户名中包含下划线。

ArcGIS Enterprise 支持用户的电子邮件地址、群组成员资格、名字以及姓氏从 SAML 身份提供者处流入。

Shibboleth 作为 SAML IDP 注册到 ArcGIS Enterprise

  1. 确认您是否以组织管理员的身份登录。
  2. 单击站点顶部的组织,然后单击设置选项卡。
  3. 单击页面左侧的安全性
  4. 登录部分中,单击新建 SAML 登录帐户按钮,然后选择一位身份提供者选项。 在指定属性页面上,输入组织名称(例如,City of Redlands)。 当用户访问门户网站时,此文本将显示为 SAML 登录选项的一部分(例如,使用您的 City of Redlands 帐户)。
    注:

    您只能为门户注册一个 SAML IDP,或一个多 IDP 联合

  5. 选择自动应管理员的邀请来指定用户加入组织的方式。 选择第一个选项允许用户通过其 SAML 登录帐户登录组织,而不会受到管理员的任何干预。 首次登录时,用户的帐户即会自动注册到该组织。 第二个选项需要管理员使用命令行实用程序将必要的帐户注册到该组织。 帐户注册完成后,用户即可登录组织。
    提示:

    建议您至少将一个 SAML 帐户指定为门户的管理员并降级或删除初始管理员帐户。 还建议您禁用门户网站中的创建帐户按钮,这样用户便无法创建自己的帐户。 有关完整说明,请参阅在门户中配置 SAML 兼容身份提供者

  6. 要为 IDP 提供元数据信息,可选择以下两个选项之一:
    • 文件 - 默认情况下,ShibbolethSHIBBOLETH_HOME/metadata 中提供 IdP 元数据文件。 如果元数据文件可供访问,请为 SAML IDP 的元数据选择文件选项,并浏览至 SHIBBOLETH_HOME/metadata/idp-metadata.xml 文件。ArcGIS Enterprise 使用 IDP 元数据文件中的第一个签名证书在 Shibboleth 中验证 SAML 声明响应中的签名。 但是,默认情况下,Shibboleth IDP 元数据文件中列出的第一个签名用于备份信道 TLS 通信,而第二个签名用于签名声明响应。 您将需要注释掉第一个签名,或将其移至第二个签名下方,然后使用更新的元数据文件将 Shibboleth 注册到 ArcGIS Enterprise。 可以使用元数据文件中的 <KeyDescriptor use="signing"> 元素来定义签名。
    • 此处指定的参数 - 如果 URL 或联合身份验证元数据文件无法访问,请选择此选项。 手动输入值并提供所需参数:以 BASE 64 格式编码的登录 URL 和证书。 请联系 Shibboleth 管理员获取这些参数。
  7. 配置适用的高级设置:
    • 加密声明 - 如果 Shibboleth 将配置为加密 SAML 声明响应,请启用此选项。
    • 启用签名请求 - 启用此选项可使 ArcGIS Enterprise 对发送至 ShibbolethSAMLSAML 身份验证请求进行签名。
    • 实体 ID - 可更新此值以使用新的实体 ID,以便将您的门户唯一识别到 Shibboleth。
    • 登录时更新个人资料 - 如果选中此选项,则 ArcGIS Enterprise 将更新用户的 givenNameemail address 属性(如果自上次登录后已更改)。
    • 启用基于 SAML 的群组成员资格 - 启用此选项允许组织成员在群组创建过程中将指定基于 SAML 的群组链接到 ArcGIS Enterprise 群组。

    加密声明启用签名请求设置将使用门户 keystore 中的证书 samlcert。 要使用新证书,请删除 samlcert 证书,按照将证书导入到门户中的步骤创建一个具有相同别名 (samlcert) 的证书,然后重新启动门户。

    注:

    目前,不支持向身份提供者传递注销注销 URL

  8. 单击保存

ArcGIS Enterprise 作为受信任的服务提供者注册到 Shibboleth

  1. ArcGIS Enterprise 配置为 Shibboleth 中的依赖方。
    1. 获取您门户的元数据文件,并将其保存为 XML 文件。

      要获取元数据文件,请以组织管理员身份登录,并打开组织页面。 单击设置选项卡,然后单击页面左侧的安全性。 在登录部分的 SAML 登录帐户下,单击下载服务提供者元数据按钮。

    2. 通过在 SHIBBOLETH_HOME/conf/metadata-providers.xml 文件中定义新 MetadataProvider 元素,将 ArcGIS Enterprise 配置为 Shibboleth 中的受信服务提供者。

      在根 MetadataProvider 元素中添加以下片段。 提供组织元数据 XML 文件的路径(在上述步骤 1.a 中保存)。

      <MetadataProvider id="EsriSP" xsi:type="FilesystemMetadataProvider"
      xmlns="urn:mace:shibboleth:2.0:metadata" 
      	xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="urn:mace:shibboleth:2.0:metadata https://shibboleth.net/schema/idp/shibboleth-metadata.xsd"
      	failFastInitialization="true"
      	metadataFile=" <PATH_TO_THE_SAVED_METADATA>/esri-sp-metadata.xml" />
      
  2. 配置用户身份验证。 在以下示例中,通过在 SHIBBOLETH_HOME/conf/ldap.properties: 文件中更新所需属性将 LDAP 目录服务器配置为用户存储。

    idp.authn.LDAP.authenticator = bindSearchAuthenticator

    idp.authn.LDAP.ldapURL = ldaps://myldap.example.org:port

    idp.authn.LDAP.baseDN = ou=People,dc=example,dc=org

    idp.authn.LDAP.userFilter= (uid={user})

    idp.authn.LDAP.bindDN = cn=readonlyuser,dc=example,dc=org

    idp.authn.LDAP.bindDNCredential = userpassword

  3. 配置将由 Shibboleth 返回的用户属性。
    1. 编辑 SHIBBOLETH_HOME/conf/attribute-resolver.xml。 标注或删除所有现有示例属性定义和数据连接器。
    2. mailgivenNamesurname 的定义从 SHIBBOLETH_HOME/conf/attribute-resolver-full.xml 文件复制到 SHIBBOLETH_HOME/conf/attribute-resolver.xml 文件。
    3. 将 LDAP 数据连接器部分从 SHIBBOLETH_HOME/conf/attribute-resolver-ldap.xml 复制到 SHIBBOLETH_HOME/conf/attribute-resolver.xml。 复制要作为 NAMEID 属性返回的 uid 或其他任何属性的定义。
    4. 配置要发布到服务提供者的属性。 编辑 SHIBBOLETH_HOME/conf/attribute-filter.xml 文件并添加以下内容:
    <AttributeFilterPolicy id="ArcGIS">
            <PolicyRequirementRule xsi:type="Requester" value="[The Entity ID of your Portal instance]" />
    			<AttributeRule attributeID="<NameID Attribute>">
    				<PermitValueRule xsi:type="ANY" />
    			</AttributeRule>
    
    			<AttributeRule attributeID="givenName">
    				<PermitValueRule xsi:type="ANY" />
    			</AttributeRule>
    
    			<AttributeRule attributeID="mail">
    				<PermitValueRule xsi:type="ANY" />
    			</AttributeRule>
    		</AttributeFilterPolicy>
    
  4. 编辑 SHIBBOLETH_HOME/conf/relying-party.xml 文件。
    1. 复制下面的 XML 代码并在 shibboleth.RelyingPartyOverrides 元素内部粘贴该代码,以覆盖 Shibboleth 身份提供者的默认配置:
      <bean parent="RelyingPartyByName" c:relyingPartyIds="[The Entity ID of your Portal instance]">
      <property name="profileConfigurations">
       <list>
        <bean parent="SAML2.SSO" 
         p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" />
       </list>
      </property>
      </bean>
      

      nameIDFormatPrecedence 参数指示 IDP 以 ArcGIS OnlineArcGIS Enterprise 要求的 unspecified 格式发送 SAML 名称 ID 属性。

    2. 通过将 encryptAssertions 参数设置为 falseShibboleth 身份提供者中关闭声明加密。
      <bean parent="RelyingPartyByName" c:relyingPartyIds="[The Entity ID of your Portal instance]">
      		<property name="profileConfigurations">
      			<list>
      				<bean parent="SAML2.SSO" 
      					p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" 
      					p:encryptAssertions="false" />
      			</list>
      		</property>
      		</bean>
      
  5. 编辑 SHIBBOLETH_HOME/conf/saml-nameid.xml 文件并将此部分替换为:
    <!--
    <bean parent="shibboleth.SAML2AttributeSourcedGenerator"
       p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
       p:attributeSourceIds="#{ {'mail'} }" />
    -->
    

    以下内容:

    <bean parent="shibboleth.SAML2AttributeSourcedGenerator"
                p:format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
                p:attributeSourceIds="#{ {'your-name-id-attribute'} }" />
    

  6. 重新启动 Shibboleth 后台程序 (Linux) 或服务 (Windows)。