配置 Shibboleth
在本主题中
可将 Shibboleth 2.3.8 和更高版本配置为 Portal for ArcGIS 中企业登录的身份提供者。配置过程涉及两个主要步骤:将企业级身份提供者注册到 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 支持企业登录的 givenName 和 email address 属性从企业级身份提供者流入。当用户使用企业登录帐户进行登录时,如果 Portal for ArcGIS 收到名为 givenname 和 email 或 mail 的属性(无论哪种),则 Portal for ArcGIS 将使用从身份提供者接收的值来填充用户帐户的全称和电子邮件地址。建议您从企业级身份提供者传递 email address,以便用户能够接收通知。
将 Shibboleth 作为企业级身份提供者注册到 ArcGIS 门户网站
- 以组织管理员的身份登录门户网站,并单击我的组织 > 编辑设置 > 安全性。
- 在企业登录部分,单击设置身份提供者按钮,并在打开的窗口中输入组织名称(例如,City of Redlands)。当用户访问门户网站时,此文本将显示为 SAML 登录选项的一部分(例如,使用您的 City of Redlands 帐户)。
- 选择用户是否可以自动或在门户中添加帐户之后加入组织。选择第一个选项可以使用户通过其企业登录帐户登录组织,而不会受到管理员的任何干预。首次登录时,用户的帐户即会自动注册到该组织。第二个选项需要管理员使用命令行实用程序或 Python 脚本示例将必要的帐户注册到该组织。帐户注册完成后,用户即可登录组织。
提示:
建议您至少将一个企业帐户指定为门户的管理员并下移或删除初始管理员帐户。还建议您禁用门户网站中的创建帐户按钮和注册页面 (signup.html),这样用户便无法创建自己的帐户。有关完整说明,请参阅在门户中配置 SAML 兼容身份提供者。
- 要为身份提供者提供元数据信息,可选择以下两个选项之一:
- 文件 - 默认情况下,Shibboleth 在 SHIBBOLETH_HOME/metadata 中提供 IdP 元数据文件。如果元数据文件可供访问,请为企业级身份提供者的元数据选择文件选项,并浏览至文件 SHIBBOLETH_HOME/metadata/idp-metadata.xml。
- 参数 - 如果无法访问文件,请选择此选项。手动输入值并提供所需参数:登录 URL 和证书。请联系 Shibboleth 管理员获取这些参数。
- 此外,还可向门户提供有关标识存储中企业群组的元数据:
- 以组织管理员的身份登录到 ArcGIS Portal Directory。URL 格式为 https://webadaptor.domain.com/arcgis/portaladmin。
- 单击安全性 > 配置 > 更新标识存储。
- 将组配置 JSON 放置于组存储配置(JSON 格式)文本框中。
复制下列文本,然后对其进行更改以包含站点的特定信息:
{ "type": "LDAP", "properties": { "userPassword": "secret", "isPasswordEncrypted": "false", "user": "uid=admin\,ou=system", "ldapURLForUsers": "ldap://bar2:10389/ou=users\,ou=ags\,dc=example\,dc=com", "ldapURLForRoles": "ldap://bar2:10389/dc=example,dc=com", "usernameAttribute": "cn", "caseSensitive": "false", "userSearchAttribute": "cn", "memberAttributeInRoles": "member", "rolenameAttribute":"cn" } }
大多数情况下,只需要更改 user、userPassword、ldapURLForUsers 和 ldapURLForUsers 参数的值。LDAP 的 URL 需要由 LDAP 管理员提供。用于用户参数的帐户需要具有在组织中查找组的名称的权限。尽管以明文形式输入密码,但在门户的配置目录中存储或查看密码时,其为加密形式。
如果将 LDAP 配置为不区分大小写,则将 caseSensitive 参数设为 "false"。
- 输入用户存储配置 JSON 后,单击更新配置以保存更改,然后重新启动门户。
将 Portal for ArcGIS 作为受信服务提供者注册到 Shibboleth
- 将 Portal for ArcGIS 配置为 Shibboleth 中的依赖方。
- 获取 portal 的元数据文件,并将其保存为 XML 文件。
要获取元数据文件,请以组织管理员身份登录,并打开组织页面。单击编辑设置按钮和安全性选项卡,然后在企业登录部分中单击获取服务提供者按钮。
- 通过在 SHIBBOLETH_HOME/conf/relying-party.xml 文件中定义新的 RelyingParty 元素,将 Portal for ArcGIS 添加为 Shibboleth 中的受信服务提供者。
在 metadata:MetadataProvider 中添加以下片段。提供贵组织元数据 XML 文件的路径(在步骤 1.a 中保存)。
注:
(将 webadaptor.domain.com.arcgis 替换为来自门户的 SAML 元数据的 entityid。)
<!-- Load metadata --> <MetadataProvider xsi:type="FilesystemMetadataProvider" xmlns="urn:mace:shibboleth:2.0:metadata" id="webadaptor.domain.com.arcgis" metadataFile="<PATH_TO_THE_SAVED_METADATA>/citygismetadata.xml"> </MetadataProvider>
- 获取 portal 的元数据文件,并将其保存为 XML 文件。
- 配置属性解析程序。
Portal for ArcGIS 要求将 SAML 名称标识符从尝试登录的用户的 IdP 传递到 Portal for ArcGIS。 要使此数据可供使用,需要通过修改 SHIBBOLETH_HOME/conf/attribute-resolver.xml 文件来配置 Shibboleth 属性解析程序。
以下属性定义将名称标识符中经 Shibboleth IdP 进行身份验证的用户的主名称发送到 Portal for ArcGIS。
<!-- Name identifier for passing principal name to Portal for ArcGIS --> <resolver:AttributeDefinition id="principal" xsi:type="PrincipalName" xmlns="urn:mace:shibboleth:2.0:resolver:ad"> <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>
- 配置属性过滤器。
配置 Shibboleth 属性过滤器,以在进行用户身份验证后将编码为 NameID 的用户主名称发布到 Portal for ArcGIS。 NameID 参数的值将用作组织中的用户名。
要添加此过滤器,请打开 SHIBBOLETH_HOME/conf/attribute-filter.xml 文件并在 AttributeFilterPolicyGroup XML 元素中添加以下属性过滤器策略。
注:
(将 webadaptor.domain.com.arcgis 替换为来自门户的 SAML 元数据的 entityid。)
<!-- release the NameID to webadaptor.domain.com.arcgis --> <afp:AttributeFilterPolicy> <afp:PolicyRequirementRule xsi:type="basic:AttributeRequesterString" value="webadaptor.domain.com.arcgis" /> <afp:AttributeRule attributeID="principal"> <afp:PermitValueRule xsi:type="basic:ANY" /> </afp:AttributeRule> </afp:AttributeFilterPolicy>
Portal for ArcGIS 支持企业登录的 givenName 和 email address 属性从企业级身份提供者流入。当用户使用企业登录帐户进行登录时,如果 Portal for ArcGIS 收到名为 givenname 和 email 或 mail 的属性(无论哪种),则 Portal for ArcGIS 将使用从身份提供者接收的值来填充用户帐户的全称和电子邮件地址。
建议您将电子邮件地址从企业级身份提供者传递到 Portal for ArcGIS。 如果用户日后成为管理员,此操作将很有帮助。帐户中存在电子邮件地址的用户拥有接收所有管理活动的相关通知以及向其他用户发送加入组织的邀请的权利。
- 配置身份验证源。
配置 Shibboleth IdP 使用的身份验证源。以下示例显示如何在 SHIBBOLETH_HOME/conf/login.config 文件中通过 Shibboleth 将 Apache Directory Server 配置为用户存储。
ShibUserPassAuth { edu.vt.middleware.ldap.jaas.LdapLoginModule required ldapUrl="ldap://host:port" baseDn="ou=users,ou=system" ssl="true" serviceUser="uid=admin,ou=system" serviceCredential="secret" subtreeSearch="true" userField="uid" userFilter="uid={0}"; };
- 配置登录处理程序。
在 Shibboleth 中启用 UsernamePassword 登录处理程序。通过登录处理程序,用户可以使用上一步中配置的身份验证源中的用户名和密码进行登录。
要配置登录处理程序,请打开 SHIBBOLETH_HOME/conf/handler.xml 文件并取消注释用户名和密码登录处理程序。(将 <SHIBBOLETH_HOME> 替换为您的 Shiobboleth 安装路径。)
<!-- Username/password login handler --> <ph:LoginHandler xsi:type="ph:UsernamePassword" jaasConfigurationLocation="file://<SHIBBOLETH_HOME>/conf/login.config"> <ph:AuthenticationMethod>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</ph:AuthenticationMethod> </ph:LoginHandler>
- 在 Shibboleth IdP 中关闭声明加密。
Portal for ArcGIS 不支持来自身份提供者的加密 SAML 声明,因此需在 Shibboleth 中关闭声明加密。 要关闭声明加密,请打开 SHIBBOLETH_HOME/conf/relying-party.xml 文件,并在元素内搜索 "saml: SAML2SSOProfile" 部分。此部分中,将 encryptAssertions 的值更改为 never。
<rp:DefaultRelyingParty provider="https://grid3.esri.com/idp/shibboleth" defaultSigningCredentialRef="IdPCredential"> ... <rp:ProfileConfiguration xsi:type="saml:SAML2SSOProfile" includeAttributeStatement="true" assertionLifetime="PT5M" assertionProxyCount="0" signResponses="never" signAssertions="always" encryptAssertions="never" encryptNameIds="never" includeConditionsNotBefore="true"/> ... </rp:DefaultRelyingParty>
- 重新启动托管 Shibboleth Web 应用程序的 Web 服务器。