Skip to main content

外部身份验证的用户名注意事项

When you use CAS, LDAP, or SAML for authentication, GitHub follows certain rules to determine the username for each user account on your instance.

关于使用外部身份验证的用户名

您可以为 GitHub Enterprise Server 配置使用 CAS、LDAP 或 SAML 的外部身份验证。 有关详细信息,请参阅“标识和访问管理基础知识”。

使用外部身份验证时,首次通过外部身份验证系统登录你的 GitHub Enterprise Server 实例时,你的 GitHub Enterprise Server 实例会自动为每个人员创建用户名。

用户名 不得超过 39 个字符。

注意

如果使用 SAML 和 SCIM 预配,必须先为用户进行 SCIM 预配,然后才能使用 SAML 单一登录。 如果用户尚未预配,他们将无法在实例上 GitHub Enterprise Server 完成身份验证。 有关详细信息,请参阅“关于在 GitHub Enterprise Server 上使用 SCIM 进行用户预配”。

关于用户名规范化

用户帐户 GitHub 的用户名只能包含字母数字字符和短划线(-)。

配置 CAS、LDAP 或 SAML 身份验证(不含 SCIM)时, GitHub Enterprise Server 使用外部身份验证提供程序上的用户帐户中的标识符来确定实例上 GitHub Enterprise Server 相应用户帐户的用户名。 使用 SCIM 配置 SAML 身份验证时, GitHub 使用从 IdP 发送的 SCIM userName 属性值来确定相应用户帐户的用户名。 如果标识符包含不受支持的字符, GitHub 将按照以下规则规范化用户名。

  1. GitHub 将帐户用户名中的任何非字母数字字符规范化为短划线。 例如,用户名 mona.the.octocat 将规范化为 mona-the-octocat。 请注意,标准化的用户名也不能以短划线开头或结尾。 它们还不能包含两个连续的短划线。

  2. IdP 提供的值中的字母大小写格式会保留在标准化的用户名中。

  3. 创建自电子邮件地址的用户名使用 @ 字符前面的规范化字符创建。

  4. 从域帐户创建的用户名是从 \\ 分隔符后面的规范化字符创建的。

  5. 如果将多个帐户规范化为相同的用户名,则将仅创建第一个用户帐户。 使用相同用户名的后续用户无法登录。

用户名规范化示例

| 提供程序上的标识符 | GitHub.com 上的规范化用户名 | 结果 | | :- | :- | :- | | The.Octocat | The-Octocat | 此用户名已成功创建。 | | !The.Octocat | -The-Octocat | 此用户名无法创建,因其以短划线开头。 | | The!!Octocat | The--Octocat | 此用户名无法创建,因其包含两个连续的短划线。 | | The!Octocat | The-Octocat | 此用户名无法创建。 虽然标准化的用户名有效,但它已经存在。 | | The.Octocat@example.com | The-Octocat | 此用户名无法创建。 虽然标准化的用户名有效,但它已经存在。 | | internal\\The.Octocat | The-Octocat | 此用户名无法创建。 虽然标准化的用户名有效,但它已经存在。 | | mona.lisa.the.octocat.from.github.united.states@example.com | mona-lisa-the-octocat-from-github-united-states | 不会创建此用户名,因为它超出了 39 个字符的限制。 |

关于使用 SAML 的用户名规范化

如果为 你的 GitHub Enterprise Server 实例 配置 SAML 身份验证,GitHub 会根据 SAML 响应中的以下某个断言来确定每位用户的用户名,以下断言按优先级从高到低排序。

  1. 自定义 username 特性(如果定义且存在)
  2. http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name 断言(如果存在)
  3. http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress 断言(如果存在)
  4. NameID 元素

GitHub NameID即使存在其他属性,也需要该元素。 有关详细信息,请参阅“SAML 配置参考”。

GitHub在来自 IdP 的 NameID 与 你的 GitHub Enterprise Server 实例 上的用户名之间创建映射,因此 NameID 应是持久的、唯一的,并且在用户的整个生命周期内不会发生变化。

注意

如果用户的 NameID 确实已在 IdP 中更改,则该用户在登录 你的 GitHub Enterprise Server 实例 时将看到错误消息。 若要恢复用户的访问权限,需要更新用户帐户的 NameID 映射。 有关详细信息,请参阅“更新用户的 SAML NameID”。