Skip To Content

配置 Shibboleth

可将 Shibboleth 3.2x 配置为 Portal for ArcGIS 中企业登录的身份提供者 (IDP)。配置过程包含两个主要步骤:将企业级身份提供者注册到 Portal for ArcGIS,以及将 Portal for ArcGIS 注册到企业级身份提供者。

此外,还可向门户提供有关标识存储中企业群组的元数据。此操作允许您 在使用标识存储中的现有企业群组的门户中创建群组。成员登录门户后,访问内容、项目和数据由企业组中定义的成员规则控制。如果您未提供必要的企业群组元数据,仍可以创建组。然而,成员规则由 Portal for ArcGIS 而不是标识存储控制。

所需信息

当用户使用企业登录帐户进行登录时,Portal for ArcGIS 需要从身份提供者处接收某些属性信息。NameID 是强制属性,该属性必须由您的身份提供者在 SAML 响应中发送,才能使 Portal for ArcGIS 的联合身份验证起作用。IDP 中的用户登录时,Portal for ArcGIS 会在其用户存储中创建用户名为 NameID 的新用户。NameID 属性发送的值中允许使用的字符包括字母数字、_(下划线)、. (圆点)和 @(at 符号)。任何其他字符均会进行转义,从而在 Portal for ArcGIS 创建的用户名中包含下划线。

Portal for ArcGIS 支持企业登录的 givenNameemail address 属性从企业级身份提供者流入。当用户使用企业登录帐户进行登录时,如果 Portal for ArcGIS 收到名为 givennameemailmail 的属性(无论哪种),则 Portal for ArcGIS 将使用从身份提供者处接收的值来填充用户帐户的全称和电子邮件地址。建议您从企业级身份提供者传递 email address,以便用户能够接收通知。

将 Shibboleth 作为企业级身份提供者注册到 Portal for ArcGIS

  1. 以组织管理员的身份登录门户网站,并单击我的组织 > 编辑设置 > 安全性
  2. 企业登录部分,单击设置身份提供者按钮,并在随即出现的窗口中输入组织名称(例如,City of Redlands)。当用户访问门户网站时,此文本将显示为 SAML 登录选项的一部分(例如,Using your City of Redlands account)。
    注:

    您可以仅为门户注册一个企业级身份提供者。

  3. 选择用户是否可以自动在门户中添加帐户之后加入组织。选择第一个选项可以使用户通过其企业登录帐户登录组织,而不会受到管理员的任何干预。首次登录时,用户的帐户即会自动注册到该组织。第二个选项需要管理员使用命令行实用程序Python 脚本示例将必要的帐户注册到该组织。帐户注册完成后,用户即可登录组织。
    提示:

    建议您至少将一个企业帐户指定为门户的管理员并下移或删除初始管理员帐户。还建议您禁用门户网站中的创建帐户按钮和注册页面 (signup.html),这样用户便无法创建自己的帐户。有关完整说明,请参阅在门户中配置 SAML 兼容身份提供者

  4. 要为身份提供者提供元数据信息,可选择以下两个选项之一:
    • 文件 - 默认情况下,Shibboleth 在 SHIBBOLETH_HOME/metadata 中提供 IdP 元数据文件。如果元数据文件可供访问,请为企业级身份提供者的元数据选择文件选项,并浏览至文件 SHIBBOLETH_HOME/metadata/idp-metadata.xml
    • 参数 - 如果无法访问文件,请选择此选项。手动输入值并提供所需参数:登录 URL 和证书。请联系 Shibboleth 管理员获取这些参数。
  5. 配置适用的高级设置:
    • 加密声明 - 如果 Shibboleth 将配置为加密 SAML 声明响应,请选择此选项。
    • 启用签名请求 - 选择此选项可使 Portal for ArcGIS 对发送至 Shibboleth 的 SAML 身份验证请求进行签名。
    • 实体 ID - 可更新此值以使用新的实体 ID,以便将您的门户唯一识别到 Shibboleth。

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

    注:

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

  6. 此外,还可向门户提供有关标识存储中企业群组的元数据:
    1. 以组织管理员的身份登录到 ArcGIS Portal Directory。URL 格式为 https://webadaptorhost.domain.com/webadaptorname/portaladmin
    2. 单击安全性 > 配置 > 更新标识存储
    3. 将组配置 JSON 放置于组存储配置(JSON 格式)文本框中。
      • 复制下列文本 ,然后对其进行更改以包含站点的特定信息:

        {
          "type": "LDAP",  "properties": {
            "userPassword": "secret",    "isPasswordEncrypted": "false",    "user": "uid=admin,ou=system",    "ldapURLForUsers": "ldaps://bar2:10636/ou=users,ou=ags,dc=example,dc=com",    "ldapURLForRoles": "ldaps://bar2:10636/dc=example,dc=com",    "usernameAttribute": "cn",    "caseSensitive": "false",    "userSearchAttribute": "cn",    "memberAttributeInRoles": "member",    "rolenameAttribute":"cn"
          }
        }

        大多数情况下,只需要更改 useruserPasswordldapURLForUsersldapURLForRoles 参数值。LDAP 的 URL 需要由 LDAP 管理员提供。

        在上述示例中,LDAP URL 指的是特定 OU (ou=users) 中的用户。如果用户存在于多个 OU 中,则 LDAP URL 可指向较高级别的 OU,甚至是根级别(如有需要)。在这种情况下,URL 如下所示:

        "ldapURLForUsers": "ldaps://bar2:10636/dc=example,dc=com",

        用于用户参数的帐户需要具有在组织中查找组的名称的权限。尽管以明文形式输入密码,但在门户的配置目录中存储或查看密码时,其为加密形式。

        如果将 LDAP 配置为区分大小写,则将 caseSensitive 参数设为 false

    4. 输入用户存储配置 JSON 后,单击更新配置以保存更改,然后重新启动门户。

Portal for ArcGIS 作为受信服务提供者注册到 Shibboleth

  1. Portal for ArcGIS 配置为 Shibboleth 中的依赖方。
    1. 获取 portal 的元数据文件,并将其保存为 XML 文件。

      要获取元数据文件,请以组织管理员身份登录,并打开组织页面。单击编辑设置按钮和安全性选项卡,然后在企业登录部分单击获取服务提供者按钮。

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

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

      <MetadataProvider id="EsriSP" xsi:type="FilesystemMetadataProvider"
      xmlns="urn:mace:shibboleth:2.0:metadata" 
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="urn:mace:shibboleth:2.0:metadata http://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. mailgivenName 的定义从 SHIBBOLETH_HOME/conf/attribute-resolver-full.xml 文件复制到 SHIBBOLETH_HOME/conf/attribute-resolver.xml 文件。然后,为将用作名称 ID 的属性添加以下条目:

      <resolver:AttributeDefinition xsi:type="ad:Simple" id="<NameID attribute>" sourceAttributeID ="<NameID attribute>">
      			<resolver:Dependency ref="myLDAP" />
      			<resolver:AttributeEncoder xsi:type="SAML2StringNameID" xmlns="urn:mace:shibboleth:2.0:attribute:encoder"
      					nameFormat="urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified" />
      		</resolver:AttributeDefinition>

    3. 将 LDAP 数据连接器部分从 SHIBBOLETH_HOME/conf/attribute-resolver-ldap.xml 复制到 SHIBBOLETH_HOME/conf/attribute-resolver.xml
    4. 配置要发布到服务提供者的属性。编辑 SHIBBOLETH_HOME/conf/attribute-filter.xml 文件并添加以下内容:
    注:

    mygis.maps.arcgis.com 替换为组织的实体 ID。

    <AttributeFilterPolicy id="ArcGIS">
            <PolicyRequirementRule xsi:type="Requester" value="mygis.maps.arcgis.com" />
    			<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 身份提供者的默认配置:
      <util:list id="shibboleth.RelyingPartyOverrides">
      <bean parent="RelyingPartyByName" c:relyingPartyIds="mygis.maps.arcgis.com">
      <property name="profileConfigurations">
       <list>
        <bean parent="SAML2.SSO"    p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified" />
       </list>
      </property>
      </bean>
          </util:list>
      注:

      mygis.maps.arcgis.com 替换为组织的实体 ID。

      nameIDFormatPrecedence 参数指示身份提供者以 ArcGIS OnlinePortal for ArcGIS 要求的 unspecified 格式发送 SAML 名称 ID 属性。

    2. 通过将 encryptAssertions 参数设置为 false 在 Shibboleth 身份提供者中关闭声明加密。
      <bean parent="RelyingPartyByName" c:relyingPartyIds="mygis.maps.arcgis.com">
      		<property name="profileConfigurations">
      			<list>
      				<bean parent="SAML2.SSO" 					p:nameIDFormatPrecedence="urn:oasis:names:tc:SAML:2.0: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:2.0:nameid-format:unspecified"
                p:attributeSourceIds="#{ {'your-name-id-attribute'} }" />

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