关于 SAML 配置
要使用 SAML 单一登录 (SSO) 对 GitHub Enterprise Cloud 进行身份验证,必须同时配置外部 SAML 标识提供者 (IdP) 和你的企业或组织(在 GitHub 上)。 在 SAML 配置中,GitHub Enterprise Cloud 充当 SAML 服务提供商 (SP)。 有关企业身份验证的详细信息,请参阅“关于身份和访问管理”。
GitHub Enterprise Cloud 根据 SAML 2.0 规范提供集成。 有关详细信息,请参阅 OASIS 网站上的 SAML Wiki。
在为 GitHub Enterprise Cloud 配置 SAML SSO 时,必须输入来自 SAML IdP 的唯一值,并且还必须在 IdP 上输入来自 GitHub Enterprise Cloud 的唯一值。
SAML 元数据
GitHub Enterprise Cloud 的 SP 元数据可用于具有 SAML SSO 的组织或企业。 GitHub Enterprise Cloud 使用 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
绑定。
如果使用 Enterprise Managed Users,则只能在企业级启用 SAML SSO。
组织
可以为企业中的单个组织配置 SAML SSO。 如果在 GitHub Enterprise Cloud 上使用单个组织,不使用企业帐户,也可以为组织配置 SAML SSO。 有关详细信息,请参阅“管理组织的 SAML 单点登录”。
GitHub 上组织的 SP 元数据在 https://github.com/orgs/ORGANIZATION/saml/metadata
上已提供,其中 ORGANIZATION 是 GitHub 上组织的名称。
值 | 其他名称 | 说明 | 示例 |
---|---|---|---|
SP 实体 ID | SP URL、受众限制 | GitHub.com 上组织的顶级 URL | https://github.com/orgs/ORGANIZATION |
SP 断言使用者服务 (ACS) URL | 回复、收件人或目标 URL | IdP 发送 SAML 响应的 URL | https://github.com/orgs/ORGANIZATION/saml/consume |
SP 单点登录 (SSO) URL | |||
IdP 开始 SSO 的 URL | https://github.com/orgs/ORGANIZATION/sso |
企业
根据你的环境,GitHub Enterprise Cloud 中的企业的 SP 元数据可从以下任意一个位置获取:
https://github.com/enterprises/ENTERPRISE/saml/metadata
,其中 ENTERPRISE 是企业的名称****https://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN/saml/metadata
,其中 SUBDOMAIN 是企业的子域****
值 | 其他名称 | 说明 | 示例 |
---|---|---|---|
SP 实体 ID | SP URL、受众限制 | GitHub.com 上企业的顶级 URL | https://github.com/enterprises/ENTERPRISE |
SP 断言使用者服务 (ACS) URL | 回复、收件人或目标 URL | IdP 发送 SAML 响应的 URL | https://github.com/enterprises/ENTERPRISE/saml/consume |
SP 单点登录 (SSO) URL | |||
IdP 开始 SSO 的 URL | https://github.com/enterprises/ENTERPRISE/saml/sso |
SAML 属性
以下 SAML 属性可用于 GitHub Enterprise Cloud。
名称 | 必需 | 说明 |
---|---|---|
NameID | 持久用户标识符。 可以使用任意持久名称标识符格式。 如果将企业用于 Enterprise Managed Users,GitHub Enterprise Cloud 将规范化要用作用户名的 NameID 元素,除非提供了其中一个替代断言。 有关详细信息,请参阅“外部身份验证的用户名注意事项”。> [!NOTE] 请务必使用易于阅读的永久性标识符。 使用暂时性标识符格式(如 urn:oasis:names:tc:SAML:2.0:nameid-format:transient )会导致每次登录时都重新链接帐户,这可能不利于授权管理。 | |
SessionNotOnOrAfter | GitHub Enterprise Cloud 使关联会话失效的日期。 使之失效后,该用户必须再次进行身份验证才能访问你的企业资源。 有关详细信息,请参阅“会话持续时间和超时”。 | |
full_name | 如果为企业配置 SAML SSO 并使用 Enterprise Managed Users,则为显示在用户配置文件页上的用户全名。 | |
emails | 用户的电子邮件地址。 如果在 GitHub Enterprise Server 和 GitHub Enterprise Cloud 之间同步许可证使用情况,则 GitHub Connect 使用 emails 在产品之间标识唯一用户。 有关详细信息,请参阅“在 GitHub Enterprise Server 和 GitHub Enterprise Cloud 之间同步许可证使用情况”。 | |
public_keys | 如果为企业配置 SAML SSO 并使用 Enterprise Managed Users,则为用户的 SSH 公钥。 你可以指定多个密钥。 | |
gpg_keys | 如果为企业配置 SAML SSO 并使用 Enterprise Managed Users,则为用户的 GPG 密钥。 你可以指定多个密钥。 |
若要为属性指定多个值,请使用多个 <saml2:AttributeValue>
元素。
<saml2:Attribute FriendlyName="public_keys" Name="urn:oid:1.2.840.113549.1.1.1" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml2:AttributeValue>ssh-rsa LONG KEY</saml2:AttributeValue>
<saml2:AttributeValue>ssh-rsa LONG KEY 2</saml2:AttributeValue>
</saml2:Attribute>
SAML 响应要求
GitHub Enterprise Cloud 要求来自 IdP 的响应消息满足以下要求。
-
你的 IdP 必须在根响应文档上提供
<Destination>
元素,并且仅在根响应文档已签名时才与 ACS URL 匹配。 如果 IdP 对断言进行了签名,GitHub Enterprise Cloud 将忽略该断言。 -
IdP 必须始终提供
<Audience>
元素作为元素的<AudienceRestriction>
一部分。 该值必须与 GitHub Enterprise Cloud 的EntityId
一致。- 如果为组织配置 SAML,则此值为
https://github.com/orgs/ORGANIZATION
。 - 如果为企业配置 SAML,则此 URL 为
https://github.com/enterprises/ENTERPRISE
或https://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN
。
- 如果为组织配置 SAML,则此值为
-
IdP 必须使用数字签名来保护响应中的每个断言。 你可以通过对每个单独的
<Assertion>
元素进行签名或通过对<Response>
元素进行签名来完成。 -
IdP 必须提供
<NameID>
元素作为<Subject>
元素的一部分。 可以使用任意持久名称标识符格式。 -
IdP 必须包含
Recipient
属性,该属性必须设置为 ACS URL。 下面的示例演示了该属性。<samlp:Response ...> <saml:Assertion ...> <saml:Subject> <saml:NameID ...>...</saml:NameID> <saml:SubjectConfirmation ...> <saml:SubjectConfirmationData Recipient="https://github.com/enterprises/ENTERPRISE/saml/consume" .../> </saml:SubjectConfirmation> </saml:Subject> <saml:AttributeStatement> <saml:Attribute FriendlyName="USERNAME-ATTRIBUTE" ...> <saml:AttributeValue>monalisa</saml:AttributeValue> </saml:Attribute> </saml:AttributeStatement> </saml:Assertion> </samlp:Response>
会话持续时间和超时
为防止有人使用你的 IdP 进行身份验证并无限期获得授权,GitHub Enterprise Cloud 会定期使有权访问你的企业资源。 使之失效后,该用户必须再次向 IdP 进行身份验证。
默认情况下,如果 IdP 未断言 SessionNotOnOrAfter
属性的值,GitHub Enterprise Cloud 会使会话在成功通过 IdP 进行身份验证后失效
24 小时。
如果 IdP 提供配置 SessionNotOnOrAfter
属性和值。
如果定义的用户会话持续时间值小于 24 小时,GitHub Enterprise Cloud 可能会提示用户在每次 GitHub Enterprise Cloud 启动重定向时进行身份验证。
为防止身份验证错误,建议会话的最短持续时间为 4 小时。 有关详细信息,请参阅“SAML 身份验证”。
Note
对于 Microsoft Entra ID(以前称为 Azure AD),SAML 令牌的可配置生存期策略不会控制 GitHub Enterprise Cloud 的会话超时。