Skip to main content

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

当您使用 Enterprise Managed Users时,GitHub会按照特定规则确定您企业中各个用户帐户的用户名。

注意

本文仅适用于 Enterprise Managed Users. 如果使用 GitHub Enterprise Cloud 不带 Enterprise Managed Users用户名,则用户名由用户创建,而不是 GitHub。

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

如果您使用带有 Enterprise Managed Users 的企业,则企业成员通过您的 SAML 身份提供商(IdP)进行身份验证,以访问 GitHub。 有关详细信息,请参阅 关于 Enterprise Managed Users标识和访问管理基础知识

GitHub 通过 SCIM 预配用户帐户时,会自动为每个人员创建用户名。

  • 要创建用户名,GitHub 会对您的 IdP 提供的标识符进行规范化处理。
  • 启用 GitHub.com 后,GitHub 还会在每个用户名的末尾添加一个下划线和您企业的短代码。

如果将多个标识符规范化为相同的用户名,则会发生用户名冲突,并且将仅创建第一个用户帐户。 可以通过更改 IdP 来解决用户名问题,以便规范化的用户名是唯一的并且符合 39 个字符的限制。

注意

冲突只能发生在同一企业的用户之间。 托管用户帐户 可以与企业外部 GitHub.com 上的其他用户帐户共享 IdP 标识符或电子邮件地址。

关于 托管用户帐户 的短代码

使用 托管用户帐户 的每个企业都与短代码相关联,该短代码是介于 3 到 8 个字符之间的字母数字字符串。

GitHub.com 上的短代码

创建 具有托管用户的企业 on GitHub.com时,请选择一个短代码,该短代码将用作所有企业成员用户名的后缀。

  • 短代码必须是企业唯一的,不包含特殊字符。
  • 请谨慎选择,因为在创建您的 具有托管用户的企业 后,无法修改短代码。

配置 SAML SSO 的设置用户的用户名格式为 SHORT-CODE_admin。 例如,如果企业的短代码为“octo”,则设置用户将为“octo_admin”。

当您通过身份提供商预配新用户时,新的 托管用户帐户 将具有一个 GitHub 用户名,其格式为 @IDP-USERNAME_SHORT-CODE(例如“mona-cat_octo”)。

GHE.com 上的短代码

如果您使用 带有数据驻留权的 GitHub Enterprise Cloud,则在 具有托管用户的企业 上创建 GHE.com 时,贵企业的短代码将随机生成。

  • 对于具有 托管用户帐户 的 数据驻留,短代码将隐藏,但它仍作为后缀追加到预配用户的用户名。
  • 唯一可能看到短代码的位置是在设置管理员的用户名中,它看起来像 2abvd19d_admin

注意

由于包含隐藏的短代码,用户名的字符限制从 39 个字符减少到 30 个字符 带有数据驻留权的 GitHub Enterprise Cloud。

关于规范化用户名

用户名是通过规范化从 IdP 发送的 SCIM userName 属性值而形成的。

| 身份提供者 | GitHub 用户名 | |-----------------------------------|----------------------| | Microsoft Entra ID(以前称为Azure AD) | IDP-USERNAME 是通过规范 UPN(用户主体名称)中 @ 字符之前的字符而形成的,不包括来宾帐户的 #EXT#。 | | Okta | IDP-USERNAME 是 IdP 提供的规范化用户名属性。 |

这些规则可能会导致 IdP 为多个用户提供相同的 IDP-USERNAME。 例如,对于 Entra ID,以下 UPN 将产生相同的用户名:

  • bob@contoso.com
  • bob@fabrikam.com
  • bob#EXT#fabrikamcom@contoso.com
  • bob_example#EXT#fabrikamcom@contoso.com
  • bob_example.com#EXT#fabrikamcom@contoso.com

这将导致用户名冲突,并且只会预配第一个用户。 有关详细信息,请参阅“解决用户名问题”。

用户名(包括下划线和短代码) 不得超过 39 个字符。

关于用户名规范化

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

配置 SAML 身份验证时,GitHub 使用 IdP 发送的 SCIM userName 属性值来确定 GitHub 上相应用户账户的用户名。 如果此值包含不受支持的字符, GitHub 将按照以下规则规范化用户名。

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

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

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

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

  5. 如果将多个帐户规范化为相同的用户名,则将仅创建第一个用户帐户。 使用相同用户名的后续用户无法登录。 有关详细信息,请参阅 解决用户名问题

用户名规范化示例

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

解决用户名问题

预配新用户时,如果用户名与企业中的现有用户冲突,则预配尝试将失败并返回 409 错误。 如果用户名超过 39 个字符(包括下划线和短代码),则预配尝试将失败,并返回 400 错误。 有关可能的用户预配状态代码的完整列表,请参阅 SCIM 的 REST API 端点

若要解决此问题,必须在 IdP 中进行以下任一更改,以便所有规范化的用户名都将符合字符限制并且是唯一的。

  • 更改导致问题的单个用户的 userName 特性值
  • 更改所有用户的 userName 特性映射
  • 配置所有用户的自定义 userName 特性

当你更改属性映射时,现有 托管用户帐户 的用户名将会更新,但账户的其他内容(包括活动历史记录)都不会改变。

注意

GitHub 支持 无法协助自定义属性映射或配置自定义表达式。 如果您有任何问题,可以联系您的身份提供者 (IdP)。

解决 Entra ID 的用户名问题

要解决 Entra ID 中的用户名问题,请修改冲突用户的用户主体名称值或修改 userName 属性的属性映射。 如果修改特性映射,可以选择现有特性或使用表达式来确保所有预配的用户都具有唯一的规范化别名。

  1. 在Entra ID中,打开GitHub Enterprise Managed User应用程序。
  2. 在左侧边栏中,单击“资源配置”。
  3. 单击“编辑配置”。
  4. 展开映射,然后单击预配 Entra ID 用户
  5. 单击GitHubuserName属性映射。
  6. 更改特性映射。
    • 若要将 Entra ID 中的现有属性映射到 GitHub 中的 userName 属性,请单击所需的属性字段。 然后,保存并等待,预配周期将在大约 40 分钟内发生。
    • 若要使用表达式而不是现有特性,请将映射类型更改为“表达式”,然后添加自定义表达式,使该值对所有用户都是唯一的。 例如,可以使用 [FIRST NAME]-[LAST NAME]-[EMPLOYEE ID]。 有关详细信息,请参阅 Microsoft Learn 上的 Microsoft Entra ID 中编写属性映射表达式的参考资料

解决 Okta 的用户名问题

若要解决 Okta 中的用户名问题,请更新应用程序的属性映射设置 GitHub Enterprise Managed User 。

  1. 在 Okta 中,打开 GitHub Enterprise Managed User应用程序。
  2. 单击“登录”。
  3. 在“设置”部分,单击“编辑”。
  4. 更新“应用程序用户名格式”。