我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们
文章版本: Enterprise Server 2.18

使用 SAML

SAML 是一种基于 XML 的身份验证和授权标准。 GitHub Enterprise Server 可以作为您的内部 SAML 身份提供程序 (IdP) 的服务提供程序 (SP)。

如果要对未添加到身份提供程序的用户进行身份验证,您可以配置内置身份验证。更多信息请参阅“允许对身份提供程序覆盖范围以外的用户进行内置身份验证”。

本文内容:

支持的 SAML 服务

我们为实施 SAML 2.0 标准的所有身份提供程序提供有限的支持。我们官方支持这些经过内部测试的身份提供程序:

GitHub Enterprise 不支持 SAML 单点注销。要终止活动的 SAML 会话,用户应直接在 SAML 服务器上注销。

使用 SAML 时的用户名考量因素

每个 GitHub Enterprise Server 用户名都由 SAML 响应中的以下断言之一决定,这些断言按优先级从高到低排列的顺序为:

即使其他属性存在,也需要 NameID 元素。

将在 NameID 与 GitHub Enterprise Server 用户名之间创建映射,NameID 应持久、唯一,并且在用户生命周期内不会发生变化。

GitHub Enterprise Server usernames can only contain alphanumeric characters and dashes (-). GitHub Enterprise Server will normalize any non-alphanumeric character in your account's username into a dash. For example, a username of gregory.st.john will be normalized to gregory-st-john. Note that normalized usernames also can't start or end with a dash. They also can't contain two consecutive dashes.

Usernames created from email addresses are created from the normalized characters that precede the @ character.

If multiple accounts are normalized into the same GitHub Enterprise Server username, only the first user account is created. Subsequent users with the same username won't be able to sign in.

This table gives examples of how usernames are normalized in GitHub Enterprise Server:

Username Normalized username 结果
Ms.Bubbles ms-bubbles This username is created successfully.
!Ms.Bubbles -ms-bubbles This username is not created, because it starts with a dash.
Ms.Bubbles! ms-bubbles- This username is not created, because it ends with a dash.
Ms!!Bubbles ms--bubbles This username is not created, because it contains two consecutive dashes.
Ms!Bubbles ms-bubbles This username is not created. Although the normalized username is valid, it already exists.
Ms.Bubbles@example.com ms-bubbles This username is not created. Although the normalized username is valid, it already exists.

双重身份验证

When using SAML or CAS, two-factor authentication is not supported or managed on the GitHub Enterprise Server appliance, but may be supported by the external authentication provider. Two-factor authentication enforcement on organizations is not available. For more information about enforcing two-factor authentication on organizations, see "Requiring two-factor authentication in your organization."

SAML 元数据

您的 GitHub Enterprise Server 实例的服务提供程序元数据位于 http(s)://[hostname]/saml/metadata 下。

要手动配置您的身份提供程序,断言使用者服务 (ACS) URL 为 http(s)://[hostname]/saml/consume。 它使用 urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST 绑定。

SAML 属性

以下属性可用。 您可以在 Management Console 中更改属性名称,但 administrator 属性除外。

默认属性名称 类型 描述
NameID 必选 持久用户标识符。 可以使用任意持久名称标识符格式。 除非提供备用断言之一,否则将为 GitHub Enterprise Server 用户名使用 NameID 元素。
administrator 可选 如果值为“true”,用户将被自动升级为管理员。 任何其他值或不存在的值会将用户降级为普通用户帐户。
用户名 可选 GitHub Enterprise Server 用户名。
full_name 可选 用户的个人资料页面上显示的姓名。 用户可以在配置后更改他们的姓名。
emails 可选 用户的电子邮件地址。 可以指定多个。
public_keys 可选 用户的 SSH 公钥。 可以指定多个。
gpg_keys 可选 用户的 GPG 密钥。 可以指定多个。

配置 SAML 设置

  1. 在任意页面的右上角,单击

    用于访问站点管理设置的火箭船图标

  2. 在左侧边栏中,单击 管理控制台

    在左侧边栏中的 管理控制台 选项卡

  3. 在左侧边栏中,单击 Authentication(身份验证)

    “设置”侧边栏中的 Authentication(身份验证)选项卡

  4. 选择 SAML

    SAML 身份验证

  5. (可选)选择 Allow built-in authentication(允许内置身份验证)以邀请用户使用内置身份验证(如果他们不属于 您的 GitHub Enterprise Server 实例 的身份提供程序)。

    选中 SAML 内置身份验证复选框

  6. 或者,要启用非请求响应 SSO,请选择 IdP initiated SSO。 默认情况下,GitHub Enterprise Server 将向 IdP 发回 AuthnRequest,回复非请求身份提供程序 (IdP) 发起的请求。

    SAML idP SSO

    :我们建议保留此值处于未选择状态。 您应在罕见的情况下启用此功能,即您的 SAML 实现不支持服务提供程序发起的 SSO,并且 GitHub Enterprise 支持 建议执行此操作。

  7. 如果您希望 SAML 提供程序为 您的 GitHub Enterprise Server 实例 上的用户确定管理员权限,请选择 Disable administrator demotion/promotion

    SAML 禁用管理员配置

  8. Single sign-on URL 字段中,为单点登录请求输入您的 IdP 上的 HTTP 或 HTTPS 端点。 此值由您的 IdP 配置提供。 如果主机只能在您的内部网络中使用,您需要先将 您的 GitHub Enterprise Server 实例 配置为使用内部域名服务器

    SAML 身份验证

  9. (可选)在 Issuer(签发者) 字段中,输入您的 SAML 签发者的姓名。 这将验证发送到 您的 GitHub Enterprise Server 实例 的消息的真实性。

    SAML 颁发者

  10. Signature MethodDigest Method 下拉菜单中,选择您的 SAML 颁发者用于验证 您的 GitHub Enterprise Server 实例 请求完整性的哈希算法。 使用 Name Identifier Format 下拉菜单指定格式。

    SAML 方法

  11. Verification certificate 下,单击 Choose File 并选择用于验证 IdP 的 SAML 响应的证书。

    SAML 身份验证

  12. 如果需要,请修改 SAML 属性名称以匹配您的 IdP,或者接受默认名称。

    SAML 属性名称

撤销 您的 GitHub Enterprise Server 实例 的权限

如果您将某个用户从您的身份提供程序中移除,还必须手动挂起他们。 否则,他们仍可以继续使用访问令牌或 SSH 密钥进行身份验证。 更多信息请参阅“挂起和取消挂起用户”。

响应消息的要求

响应消息必须满足以下要求:

<Audience> 元素必须始终作为 <AudienceRestriction> 元素的一部分提供。 此元素必须匹配 GitHub Enterprise Server 实体 Id。这是 GitHub Enterprise Server 实例的 URL,例如 https://ghe.corp.example.com

<samlp:Response ...>
  <saml:Assertion ...>
    <saml:Subject>
      <saml:NameID ...>...</saml:NameID>
      <saml:SubjectConfirmation ...>
        <saml:SubjectConfirmationData Recipient="https://ghe.corp.example.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>

错误消息

如果 Recipient 与 ACS URL 不匹配,身份验证日志中将显示以下错误消息:

Recipient in the SAML response was not valid.

如果 Recipient 不是响应消息的一部分,身份验证日志中将显示以下错误消息:

Recipient in the SAML response must not be blank.

如果 SAML 响应未签名,或者签名与内容不匹配,身份验证日志中将显示以下错误消息:

SAML Response is not signed or has been modified.

如果 Audience 缺失或者与 GitHub Enterprise Server 实体 Id 不匹配,身份验证日志中将显示以下错误消息:

Audience is invalid. Audience attribute does not match your_instance_url

问问别人

找不到要找的内容?

联系我们