Skip to main content
我们经常发布文档更新,此页面的翻译可能仍在进行中。 有关最新信息,请访问英语文档
GitHub AE 目前处于受限版。

SAML 配置参考

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

关于 SAML 配置

要使用 SAML 单一登录 (SSO) 对 GitHub AE 进行身份验证,必须同时配置外部 SAML 标识提供者 (IdP) 和你的企业(在 GitHub AE 上)。 在 SAML 配置中,GitHub AE 充当 SAML 服务提供商 (SP)。

在为 GitHub AE 配置 SAML SSO 时,必须输入来自 SAML IdP 的唯一值,并且还必须在 IdP 上输入来自 GitHub AE 的唯一值。 有关为 GitHub AE 配置 SAML SSO 的详细信息,请参阅“为企业配置 SAML 单点登录”。

SAML 元数据

GitHub AE 上企业的 SP 元数据在 https://HOSTNAME/saml/metadata 上已提供,其中 HOSTNAME 是 GitHub AE 上企业的主机名。 GitHub AE 使用 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST 绑定。

其他名称说明示例
SP 实体 IDSP URL、受众限制GitHub AE 的顶级 URLhttps://HOSTNAME
SP 断言使用者服务 (ACS) URL回复、收件人或目标 URLIdP 发送 SAML 响应的 URLhttps://HOSTNAME/saml/consume
SP 单点登录 (SSO) URLIdP 开始 SSO 的 URLhttps://HOSTNAME/sso

SAML 属性

以下 SAML 属性可用于 GitHub AE。

名称必须说明
NameID持久用户标识符。 可以使用任意持久名称标识符格式。 GitHub AE 将规范化要用作用户名的 NameID 元素,除非提供了其中一个替代断言。 有关详细信息,请参阅“外部身份验证的用户名注意事项”。

注意:请务必使用易于阅读的永久性标识符。 使用暂时性标识符格式(如 urn:oasis:names:tc:SAML:2.0:nameid-format:transient)会导致每次登录时重新链接帐户,这可能不利于授权管理。
SessionNotOnOrAfterGitHub AE 使关联会话失效的日期。 使之失效后,该用户必须再次进行身份验证才能访问你的企业资源。 有关详细信息,请参阅“会话持续时间和超时”。

若要为属性指定多个值,请使用多个 <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 AE 要求来自 IdP 的响应消息满足以下要求。

  • 你的 IdP 必须在根响应文档上提供 <Destination> 元素,并且仅在根响应文档已签名时才与 ACS URL 匹配。 如果 IdP 对断言进行了签名,GitHub AE 将忽略该断言。

  • IdP 必须始终提供 <Audience> 元素作为元素的 <AudienceRestriction> 一部分。 该值必须与 GitHub AE 的 EntityId 一致。 此值是用于访问 你的企业 的 URL,例如 https://SUBDOMAIN.githubenterprise.comhttps://SUBDOMAIN.github.ushttps://SUBDOMAIN.ghe.com

  • 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://SUBDOMAIN.ghe.com/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 AE 会定期使有权访问你的企业资源。 使之失效后,该用户必须再次向 IdP 进行身份验证。 默认情况下,如果 IdP 未断言 SessionNotOnOrAfter 属性的值,GitHub AE 会使会话在成功通过 IdP 进行身份验证后失效两周。

若要自定义会话持续时间,可以在 IdP 上定义 SessionNotOnOrAfter 属性的值。 如果定义的值小于 24 小时,GitHub AE 可能会提示用户在每次 GitHub AE 启动重定向时进行身份验证。

注释

  • 对于 Azure AD,SAML 令牌的可配置生存期策略不会控制 GitHub AE 的会话超时。
  • 目前,Okta 在 SAML 身份验证期间不会使用 GitHub AE 发送 SessionNotOnOrAfter 属性。 有关详细信息,请联系 Okta。