Skip to main content

SAML 配置参考

可查看组织或企业(在 上)的 SAML 元数据,并详细了解可用的 SAML 属性和响应要求。

关于 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 实体 IDSP URL、受众限制GitHub.com 上组织的顶级 URLhttps://github.com/orgs/ORGANIZATION
SP 断言使用者服务 (ACS) URL回复、收件人或目标 URLIdP 发送 SAML 响应的 URLhttps://github.com/orgs/ORGANIZATION/saml/consume
SP 单点登录 (SSO) URL
IdP 开始 SSO 的 URLhttps://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 实体 IDSP URL、受众限制GitHub.com 上企业的顶级 URLhttps://github.com/enterprises/ENTERPRISE
SP 断言使用者服务 (ACS) URL回复、收件人或目标 URLIdP 发送 SAML 响应的 URLhttps://github.com/enterprises/ENTERPRISE/saml/consume
SP 单点登录 (SSO) URL
IdP 开始 SSO 的 URLhttps://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/ENTERPRISEhttps://SUBDOMAIN.ghe.com/enterprises/SUBDOMAIN
  • 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 令牌的可配置生存期策略不会控制 的会话超时。