当使用 GitHub Enterprise Server 上的 IdP for IAM 时,SAML SSO 可控制并保护对企业资源(如仓库、议题和拉取请求)的访问。 对 IdP 进行更改时,SCIM 会自动创建用户帐户并管理对企业的访问权限。 还可将 GitHub 上的团队与 IdP 上的组同步。 有关详细信息,请参阅 关于在 GitHub Enterprise Server 上使用 SCIM 进行用户预配。
概述
本指南将帮助你在 PingFederate 上为 GitHub 设置 SAML 身份验证和 SCIM 预配。
在开始之前,请注意以下事项:
- 将 PingFederate 用作 GitHub Enterprise Server 的 IdP 处于 公共预览版 阶段。 请联系您的帐户团队以便提供反馈。
- 本指南基于 PingFederate 版本 12.1。 其他版本的说明可能有所不同。
- 本指南提供配置工作设置的最少步骤。 由于标识目录可能以不同的方式连接到 PingFederate,因此需要根据后备数据存储中提供的内容为 SAML 和 SCIM 选取正确的数据属性。
先决条件
在 GitHub Enterprise Server 上使用 SCIM 的一般先决条件适用。 请参阅“配置 SCIM 预配 (用于管理用户)”中的“先决条件”部分。
此外:
- 若要配置 SCIM,必须完成“AUTOTITLE”中的步骤 1 到 4。
- 你需要为设置用户创建的 personal access token (classic) 对来自 PingFederate 的请求进行身份验证。
- 必须在 PingFederate 上安装“GitHub EMU 连接器”。 若要下载并安装连接器,请参阅 PingIdentity 文档中的安装预配程序。
- 若要使用 SCIM 预配用户,必须使用 LDAP 服务器作为后备数据存储。
- 您可能需要配置 PingFederate 的防火墙,以允许出站连接至:,即 GitHub Enterprise Server 实例上的
https://HOSTNAME/api/v3/scim/v2终结点。 - PingFederate 的“预配模式”必须设置为允许 SCIM 预配的值。 请参阅 PingIdentity 配置出站预配设置指南中的“准备阶段”部分。
- 在此过程中,需要将 X509 证书上传到 PingFederate。 在继续操作之前,可能需要创建和存储证书。 你还需要证书的挑战密码。 请参阅本文后面的“创建 X509 证书的示例”部分。
1. 配置 SAML
在本部分中,将在 PingFederate 中创建 SAML 连接器,设置 LDAP IdP 适配器实例,并从 IdP 适配器管理 SAML 输出。
-
[创建 SAML 适配器](#create-a-saml-adapter) -
[设置 LDAP IdP 适配器实例](#set-up-an-ldap-idp-adapter-instance) -
[管理 IdP 适配器的 SAML 输出](#manage-saml-output-from-your-idp-adapter)
在开始本部分之前,请确保你已按照“AUTOTITLE”中的步骤 1 和 2 进行操作。
创建 SAML 适配器
-
打开 PingFederate 管理控制台。
-
在标头中单击“应用程序”,然后单击左边栏中的“SP 连接”。
-
单击为此连接使用模板,然后从“连接模板”下拉列表中选择“GitHub EMU 连接器”。
注意
如果未看到此选项,则尚未安装 GitHub EMU 连接器。 如果需要帮助,请联系 Ping 代表。
-
为了填充 PingFederate 配置中的一些字段,需要上传一个包含你的企业的 SAML 元数据的 XML 文件。
- 在新选项卡中,作为内置设置用户登录到 GitHub。
导航到位于
https://HOSTNAME/saml/metadata的 SAML 元数据页。 - 将页面下载为 XML 文件。
- 在新选项卡中,作为内置设置用户登录到 GitHub。
导航到位于
-
在 PingFederate 的“SP Connection”页面上,将上一步中的文件作为元数据文件上传。请确保在下载文件后的 5 分钟内完成此操作。
-
转到“连接类型”选项卡。
-
选择“浏览器 SSO 配置文件”,然后取消选择“出站预配”(稍后将启用此功能)。
-
单击 “下一步” 。
-
在“连接选项”选项卡上,确保仅选择“浏览器 SSO”****。
-
单击 “下一步” 。
-
在“常规信息”选项卡上,输入以下详细信息。
- “Partner’s Entity ID”:你的 GitHub 主机 URL(
https://HOSTNAME.com) - “连接名称”:PingFederate 中 SP 连接的描述性名称
- “Base URL”:你的 GitHub 主机 URL(
https://HOSTNAME.com) - “事务日志记录”:标准
- 所有其他字段均可留空。
- “Partner’s Entity ID”:你的 GitHub 主机 URL(
-
单击 “下一步” 。
-
单击“配置浏览器 SSO”****。
-
单击“配置断言创建”****。
-
在“身份验证源映射”选项卡上,单击“映射新适配器实例”****。
-
在“适配器实例”选项卡上,单击“管理适配器实例”****。
-
单击“创建新实例”****。
设置 LDAP IdP 适配器实例
-
在 PingFederate 上“创建适配器实例”页的“类型”选项卡上,输入以下详细信息。
- “实例名称”:用于标识实例的名称,例如
pfghadapter - “实例 ID”:实例的 ID,例如
pfghadapter - “类型”:HTML 表单 IdP 适配器
- “父实例”:无
- “实例名称”:用于标识实例的名称,例如
-
单击 “下一步” 。
-
在页面底部的“IDP 适配器”选项卡上,单击“管理密码凭据验证程序”****。
-
单击“创建新实例”****。
-
在“类型”选项卡上,输入以下详细信息。
- “实例名称”:用于标识实例的名称,例如
pfghdocscv - “实例 ID”:实例的 ID,例如
pfghdocscv - “类型”:LDAP 用户名密码凭据验证程序
- “父实例”:无
- “实例名称”:用于标识实例的名称,例如
-
单击 “下一步” 。
-
在“实例配置”选项卡上,单击“管理数据存储”****。
-
单击“添加新数据存储”****。
-
在“数据存储类型”选项卡上,输入以下详细信息。
- “实例名称”:任何唯一值,例如
pfghdocsds - “类型”:目录 (LDAP)
- “掩码日志值”:取消选择
- “实例名称”:任何唯一值,例如
-
单击 “下一步” 。
-
在“LDAP 配置”选项卡上,配置 LDAP 服务器详细信息。
-
单击 “测试连接”。 应会看到“连接测试成功”。
-
单击页面底部的“高级”****。
-
单击“LDAP 二进制属性”选项卡,然后添加
guidAttribute和objectGUID作为属性。 -
单击“完成”。 应返回到“LDAP 配置”选项卡。
-
单击“下一步”,然后单击“保存”。
-
在“管理数据存储”选项卡上,单击“完成”****。
-
在“实例配置”选项卡上,输入以下详细信息。
- “LDAP 数据存储”:上面创建的数据存储的名称
- “搜索基础”:您希望 LDAP 搜索开始的目录位置
- “搜索筛选器”:确保用户登录时输入的用户名与 LDAP 服务器中的字段匹配(例如:
sAMAccountName=${username}) - “搜索范围”:子树
- “区分大小写匹配”:已选择
-
单击“下一步”,再次单击“下一步”,然后单击“保存”****。
管理 IdP 适配器的 SAML 输出
-
在“管理密码凭据验证程序”页上,单击“完成”****。
-
在“IDP 适配器”选项卡上,输入以下详细信息。
- “密码凭据验证程序实例”:上面创建的验证程序实例的名称(例如
pfghdocscv)。 单击“更新”**** 以完成选择。 - 所有其他字段都可以保留为默认值,或者根据你的要求进行修改。
- “密码凭据验证程序实例”:上面创建的验证程序实例的名称(例如
-
单击“下一步”,然后再次单击“下一步”。
-
在“适配器属性”选项卡上,输入以下详细信息。
-
“唯一用户密钥属性”:
username -
在
username属性旁边,选择“假名”。
注意
此步骤非常重要, 在 SCIM 预配过程中,适配器属性用于在 GitHub 上唯一标识用户。
-
-
单击“下一步”,然后再次单击“下一步”。
-
查看摘要页上的设置,然后单击“保存”****。
-
在“IdP 适配器”选项卡上,应会看到刚刚创建的适配器。 单击“完成”。
-
在“适配器实例”选项卡上的“适配器实例”下拉列表中,选择刚刚创建的适配器。
-
单击 “下一步” 。
-
在“映射方法”选项卡上,选择“仅使用 SAML 断言 中的适配器协定值”****(其他选项可能有效,但尚未确认)。
-
单击 “下一步” 。
-
在“属性协定履行”选项卡上,将
SAML_SUBJECT映射到“适配器”作为源,而username作为值。注意
此步骤非常重要, 规范化
SAML_SUBJECT需要匹配 SCIM 预配的用户的规范化用户名。 -
单击“下一步”,再次单击“下一步”,然后单击“完成”****。
-
应返回到“身份验证源映射”选项卡,且“适配器实例名称”部分应包含刚刚创建的适配器实例。
-
单击 “下一步” 。
-
在“Protocol Settings”选项卡上,单击“Configure Protocol Settings”****。
-
对于“断言使用者服务 URL”,添加一行包含以下详细信息:
- 已选择“默认”
- “Index”:0
- “Binding”:POST
- “Endpoint URL”:
HOSTNAME/saml/consume
-
单击 “下一步” 。
-
在“允许的 SAML 绑定”选项卡上,确保仅选中“POST”和“REDIRECT”。
-
单击 “下一步” 。
-
在“Signature Policy”页上,确保仅选中“SIGN RESPONSE AS REQUIRED”。
-
单击 “下一步” 。
-
在“Encryption Policy”选项卡上,确保已选择“NONE”。
-
单击 “下一步” 。
-
单击“ 保存”。
-
单击“下一步”**** 和“完成”****,直到到达“凭据”选项卡。
-
在“凭据”选项卡上,单击“配置凭据”,然后单击“管理证书”。
-
在“Certificate Management”页上,单击“Import”,然后上传 X509 证书(如需帮助,请参阅“创建 X509 证书的示例”部分)。
-
对于“密码”,请使用证书的挑战密码。
-
单击“下一步”,然后单击“保存”。
-
在“证书管理”选项卡上,应会看到刚刚导入的证书。 单击“完成”。
-
在“数字签名设置”选项卡上:
- 为“签名证书”选择刚创建的证书。
- 可以将辅助证书留空,并取消选中“在签名中包含证书”复选框。
- 签名算法应为“RSA SHA256”。
-
依次单击“下一步”、“完成”、“下一步”****。
-
在“摘要”选项卡上,启用“SSO 应用程序终结点”的切换。
-
单击“ 保存”。 应返回到 SP 连接列表,在此应会看到新创建的 SP 连接。
收集 SAML 配置的信息
您需要 PingFederate 中的一些详细信息才能在 GitHub 上进行 SAML 配置。
- 在“SP 连接”页上新连接的行中,单击“选择操作”,然后单击“导出元数据”。
- 在“元数据签名”选项卡上新连接的行中,选择上面创建的签名证书。 要下载该证书,请单击“下一步”,然后单击“导出”。
- 在 PingFederate 上,依次单击标头中的“系统”、“服务器” 和“协议设置”****。 检查
SAML 2.0 ENTITY ID是否已定义。 请记下此项,因为 GitHub 的 SAML 设置中的“颁发者”字段需要该内容。 - 打开下载的元数据文件,并准备好执行后续步骤。
配置 GitHub
-
以 有权访问管理控制台的用户 身份登录 GitHub。
-
在企业设置中启用 SAML。 请参阅为企业配置 SAML 单点登录。
-
输入上一部分中 SAML 元数据文件中的以下值。
- 对于“单一登录 URL”,请使用
location字段的<md: SingleSignOnService>值。 此项应为以/idp/SSO.saml2结尾的 URL。 - 对于“颁发者”,请使用
entityId字段的<md: EntityDescriptor>值 (URL)。
- 对于“单一登录 URL”,请使用
-
对于“验证证书”,上传之前创建的 X509 证书文件。
-
单击“保存设置”。
2. 配置 SCIM
在本部分中,将在 PingFederate 上配置 SCIM 设置和属性映射。
-
[配置 SCIM 设置](#configure-scim-settings) -
[将 LDAP 字段映射到 SCIM](#map-ldap-fields-to-scim) -
[完成配置和测试](#finish-configuration-and-test)
在开始本部分之前,请确保你已按照“AUTOTITLE”中的步骤 1 到 4 进行操作。
配置 SCIM 设置
-
返回到 PingFederate 上的“SP 连接”页,然后选择之前创建的 SP 连接。
-
单击“连接类型”选项卡。
-
选择出站预配。
-
请确保选择了浏览器 SSO 类型。
-
单击“下一步”,直到到达“出站预配”选项卡,然后单击“配置预配”。
-
在“目标”选项卡上,输入以下详细信息。
- “Base URL”:
https://HOSTNAME/api/v3/scim/v2 - “Access Token”:为设置用户创建的 personal access token (classic)
- “Base URL”:
-
单击 “下一步” 。
-
在“管理频道”选项卡上,单击“创建”****,然后输入唯一的频道名称,例如
pfghscim。 -
单击 “下一步” 。
-
在“源”选项卡上,选择之前创建的数据存储。
-
单击 “下一步” 。
-
在“源设置”选项卡上,可以保留所有默认设置。 其他设置可能会正常工作,但尚未确认。
-
单击 “下一步” 。
-
在“源位置”选项卡上,配置希望预配用户来自 LDAP 服务器中的位置。 这将根据你的设置和需求而有所不同。 配置后,单击“下一步”****。
将 LDAP 字段映射到 SCIM
在“属性映射”选项卡上,需要将字段从 LDAP 服务器映射到 SCIM 字段。 请参阅以下列表,了解 GitHub 支持的 SCIM 字段以及每个字段的预期值。
- Username:这将被规范化,并用作预配用户的 GitHub 用户名****。 请参阅“外部身份验证的用户名注意事项”。 该值必须与使用 PingFederate 中
SAML_SUBJECT属性配置的 SAML 断言中发送的主题的规范化结果一致。 - 电子邮件****:包含用户电子邮件地址的字段。
- 显示名称****:用户可读的名称。
- 格式化名称****:用户的全名,包括所有中间名、称谓和后缀,经过格式化以便显示。
-
**名字:** 用户的名字。 - 姓氏****:用户的姓氏。
- 外部 ID****:此标识符由 IdP 提供程序生成。
- Roles:此字段应包含一个字符串,表示用户对 GitHub 的预期角色****。 有效的角色是
enterprise_owner和user。
完成配置设置后,请单击“下一步”****。
完成配置和测试
- 在“激活 & 摘要”选项卡中,对于“通道状态”,请选择“活动”。
- 在“管理频道”选项卡上,单击“完成”****。
- 在“出站预配”选项卡上,单击“保存”****。 SCIM 现已配置并启用。
- 等待几分钟让预配运行,然后打开一个新的专用浏览器窗口并导航到 GitHub。
- 单击“使用 SAML 登录”****。 应重定向到 PingFederate 登录页。
- 你应该能够使用已预配到 GitHub 的 LDAP 服务器中用户的凭据登录。
PingFederate 预配可独立处理用户和组。 必须直接分配用户才能进行预配。 未直接分配但属于指定组的用户不会被预配。
完成 SCIM 配置后,你可能想要禁用为配置过程启用的某些 SAML 设置。 请参阅“配置 SCIM 预配 (用于管理用户)”。
创建 X509 证书的示例
可通过多种方式创建 X509 证书。 下面是一个可能满足要求的示例。
-
在终端窗口中,通过运行
openssl version检查是否已安装 OpenSSL。 如果未安装,请安装它。 -
使用以下命令生成私钥。
Shell openssl req -nodes -sha256 -newkey rsa:2048 -keyout MyPrivateKey.key -out MyCertificateRequest.csr
openssl req -nodes -sha256 -newkey rsa:2048 -keyout MyPrivateKey.key -out MyCertificateRequest.csr输入所需信息,并记下你创建的挑战密码。
-
要确保密钥已创建,请运行以下命令。 命令输出中应列出一个名为
MyPrivateKey.key的文件。Shell ls | grep MyPrivateKey.key
ls | grep MyPrivateKey.key -
使用以下命令生成证书。
Shell openssl x509 -req -days 365 -sha256 -in MyCertificateRequest.csr -signkey MyPrivateKey.key -out pfgh256.crt
openssl x509 -req -days 365 -sha256 -in MyCertificateRequest.csr -signkey MyPrivateKey.key -out pfgh256.crt -
要确保证书已创建,请运行以下命令。 命令输出中应列出一个名为
pfgh256.crt的文件。Shell ls | grep pfgh256.crt
ls | grep pfgh256.crt -
使用以下命令导出 PKCS #12 文件。 这是应上传到 PingFederate**** 的文件。
Shell openssl pkcs12 -export -in pfgh256.crt -inkey MyPrivateKey.key -out pfgh256.p12
openssl pkcs12 -export -in pfgh256.crt -inkey MyPrivateKey.key -out pfgh256.p12 -
要确保文件已导出,请运行以下命令。 命令输出中应列出一个名为
pfgh256.p12的文件。Shell ls | grep pfgh256.p12
ls | grep pfgh256.p12