关于 SAML 配置
要使用 SAML 单一登录 (SSO) 对 进行身份验证,必须同时配置外部 SAML 标识提供者 (IdP) 和你的企业或组织(在 GitHub 上)。 在 SAML 配置中, 充当 SAML 服务提供商 (SP)。 有关企业身份验证的详细信息,请参阅“关于身份和访问管理”。
根据 SAML 2.0 规范提供集成。 有关详细信息,请参阅 OASIS 网站上的 SAML Wiki。
在为 配置 SAML SSO 时,必须输入来自 SAML IdP 的唯一值,并且还必须在 IdP 上输入来自 的唯一值。
SAML 元数据
的 SP 元数据可用于具有 SAML SSO 的组织或企业。 使用 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST
绑定。
如果使用 Enterprise Managed Users,则只能在企业级启用 SAML SSO。
组织
可以为企业中的单个组织配置 SAML SSO。 如果在 上使用单个组织,不使用企业帐户,也可以为组织配置 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 属性可用于 。
名称 | 必需 | 说明 |
---|---|---|
NameID | 持久用户标识符。 可以使用任意持久名称标识符格式。 如果将企业用于 Enterprise Managed Users, 将规范化要用作用户名的 NameID 元素,除非提供了其中一个替代断言。 有关详细信息,请参阅“外部身份验证的用户名注意事项”。> [!NOTE] 请务必使用易于阅读的永久性标识符。 使用暂时性标识符格式(如 urn:oasis:names:tc:SAML:2.0:nameid-format:transient )会导致每次登录时都重新链接帐户,这可能不利于授权管理。 | |
SessionNotOnOrAfter | 使关联会话失效的日期。 使之失效后,该用户必须再次进行身份验证才能访问你的企业资源。 有关详细信息,请参阅会话持续时间和超时。 | |
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 响应要求
要求来自 IdP 的响应消息满足以下要求。
-
你的 IdP 必须在根响应文档上提供
<Destination>
元素,并且仅在根响应文档已签名时才与 ACS URL 匹配。 如果 IdP 对断言进行了签名, 将忽略该断言。 -
IdP 必须始终提供
<Audience>
元素作为元素的<AudienceRestriction>
一部分。 该值必须与 的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 进行身份验证并无限期获得授权, 会定期使有权访问你的企业资源。 使之失效后,该用户必须再次向 IdP 进行身份验证。
默认情况下,如果 IdP 未断言 SessionNotOnOrAfter
属性的值, 会使会话在成功通过 IdP 进行身份验证后失效
24 小时。
如果 IdP 提供配置 SessionNotOnOrAfter
属性和值。
如果定义的用户会话持续时间值小于 24 小时, 可能会提示用户在每次 启动重定向时进行身份验证。
为防止身份验证错误,建议会话的最短持续时间为 4 小时。 有关详细信息,请参阅“SAML 身份验证”。
Note
对于 Microsoft Entra ID(以前称为 Azure AD),SAML 令牌的可配置生存期策略不会控制 的会话超时。