Note
本文仅适用于 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 个字符的限制。
Note
冲突只能发生在同一企业的用户之间。 托管用户帐户 可以与企业外部 GitHub.com 上的其他用户帐户共享 IdP 标识符或电子邮件地址。
关于 托管用户帐户 的短代码
使用 托管用户帐户 的每家企业都与一个短代码关联,该短代码是一个字母数字字符串,长度介于 3 到 8 个字符之间。
GitHub.com 上的短代码
在 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
。
关于规范化用户名
用户名是通过规范化从 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 Enterprise Cloud 使用从 IdP 发送的 SCIM userName
特性值来确定 GitHub 上相应用户帐户的用户名。 如果此值包含不受支持的字符,GitHub Enterprise Cloud 将按照以下规则规范化用户名。
-
GitHub Enterprise Cloud 会将帐户用户名中的所有非字母数字字符规范化为短划线。 例如,用户名
mona.the.octocat
将规范化为mona-the-octocat
。 请注意,标准化的用户名也不能以短划线开头或结尾。 它们还不能包含两个连续的短划线。 -
创建自电子邮件地址的用户名使用
@
字符前面的规范化字符创建。 -
从域帐户创建的用户名是从
\\
分隔符后面的规范化字符创建的。 -
如果将多个帐户规范化为相同的 GitHub Enterprise Cloud 用户名,则将仅创建第一个用户帐户。 使用相同用户名的后续用户无法登录。 有关详细信息,请参阅“解决用户名问题”。
用户名规范化示例
提供程序上的标识符 | 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 | 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 个字符的限制。 |
解决用户名问题
预配新用户时,如果用户名的长度超过 39 个字符(包含下划线和短代码),或者与企业中的现有用户冲突,则预配尝试将失败并出现 409
错误。
若要解决此问题,必须在 IdP 中进行以下任一更改,以便所有规范化的用户名都将符合字符限制并且是唯一的。
- 更改导致问题的单个用户的
userName
特性值 - 更改所有用户的
userName
特性映射 - 配置所有用户的自定义
userName
特性
更改特性映射时,现有 托管用户帐户 的用户名将更新,但有关帐户的其他任何内容都不会更改,包括活动历史记录。
Note
GitHub 支持 无法为自定义特性映射或配置自定义表达式提供帮助。 如有任何问题,可以联系 IdP。
解决 Entra ID 的用户名问题
要解决 Entra ID 中的用户名问题,请修改冲突用户的用户主体名称值或修改 userName
属性的属性映射。 如果修改特性映射,可以选择现有特性或使用表达式来确保所有预配的用户都具有唯一的规范化别名。
- 在 Entra ID 中,打开 GitHub Enterprise Managed User 应用程序。
- 在左侧边栏中,单击“预配”。
- 单击“编辑预配”。
- 展开“映射”,然后单击“预配 Entra ID 用户”。
- 单击 GitHub
userName
特性映射。 - 更改特性映射。
- 要将 Entra ID 中的现有属性映射到 GitHub 中的
userName
属性,请单击所需的属性字段。 然后,保存并等待,预配周期将在大约 40 分钟内发生。 - 若要使用表达式而不是现有特性,请将映射类型更改为“表达式”,然后添加自定义表达式,使该值对所有用户都是唯一的。 例如,可以使用
[FIRST NAME]-[LAST NAME]-[EMPLOYEE ID]
。 有关详细信息,请参阅 Microsoft Learn 上的有关在 Microsoft Entra ID 中编写属性映射表达式的参考。
- 要将 Entra ID 中的现有属性映射到 GitHub 中的
解决 Okta 的用户名问题
若要解决 Okta 中的用户名问题,请更新 GitHub Enterprise Managed User 应用程序的特性映射设置。
- 在 Okta 中,打开 GitHub Enterprise Managed User 应用程序。
- 单击“登录”。
- 在“设置”部分,单击“编辑”。
- 更新“应用程序用户名格式”。