Skip to main content

此版本的 GitHub Enterprise 已停止服务 2022-06-03. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

SAML 身份验证

如果使用 SAML 单点登录 (SSO),并且用户无法通过身份验证来访问 您的 GitHub Enterprise Server 实例,则可以对问题进行故障排除。

关于 SAML 身份验证的问题

GitHub Enterprise Server 在 /var/log/github/auth.log 的身份验证日志中为失败的 SAML 身份验证记录错误消息。 您可以在此日志文件中查看响应,还可以配置更详细的日志记录。

关于 SAML 响应要求的更多信息,请参阅“SAML 配置参考”。

配置 SAML 调试

您可以配置 GitHub Enterprise Server 在每次 SAML 身份验证尝试时将详细调试日志写入 /var/log/github/auth.log。 您可以使用此额外输出对失败的身份验证尝试进行故障排除。

警告

  • 仅暂时启用 SAML 调试,并在完成故障排除后立即禁用调试。 如果保持启用调试,日志大小的增长速度可能会比平时快得多,这可能会对 GitHub Enterprise Server 的性能产生负面影响。
  • 在生产环境中应用这些设置之前,请在暂存环境中测试 您的 GitHub Enterprise Server 实例 的新身份验证设置。 更多信息请参阅“设置暂存实例”。
  1. 在 GitHub Enterprise Server 的右上角,单击您的个人资料照片,然后单击 Enterprise settings(Enterprise 设置)GitHub Enterprise Server 上个人资料照片下拉菜单中的"Enterprise settings(企业设置)"

  2. 在企业账户侧边栏中,单击 Policies(政策)企业帐户侧边栏中的 Policies(政策)选项卡

  3. Policies(政策)下,单击 Options(选项)企业帐户设置侧边栏中的 Options(选项)选项卡

  4. 在“SAML debugging(SAML 调试)”下,选择下拉列表,然后单击 Enabled(启用)

    用于启用 SAML 调试的下拉列表屏幕截图

  5. 尝试通过 SAML IdP 登录 您的 GitHub Enterprise Server 实例。

  6. 在 您的 GitHub Enterprise Server 实例 上的 /var/log/github/auth.log 中查看调试输出。

  7. 完成故障排除后,选择下拉列表,然后单击 Disabled(禁用)

    用于禁用 SAML 调试的下拉列表屏幕截图

解码 auth.log 中的响应

auth.log 中的某些输出可能是 Base64 编码的。 您可以访问管理 shell 并在 您的 GitHub Enterprise Server 实例 上使用 base64 实用程序对这些响应进行解码。 更多信息请参阅“访问管理 shell (SSH)。”

$ base64 --decode ENCODED OUTPUT

Error: "Another user already owns the account"(错误:“其他用户已拥有该帐户”)

当用户首次使用 SAML 身份验证登录到 您的 GitHub Enterprise Server 实例 时, GitHub Enterprise Server 会在实例上创建一个用户帐户,并将 SAML NameID 映射到该帐户。

当用户再次登录时,GitHub Enterprise Server 会比较帐户的 NameID 映射与 IdP 的响应。 如果 IdP 响应中的 NameID 不再与 GitHub Enterprise Server 对用户预期的 NameID 匹配, 登录将失败。 用户将看到以下消息。

另一个用户已经拥有该帐户。 请让您的管理员检查身份验证日志。

该消息通常表示此人的用户名或电子邮件地址已在 IdP 上更改。 确保 GitHub Enterprise Server 上用户帐户的 NameID 映射与 IdP 上的用户 NameID 相匹配。 更多信息请参阅“更新用户的 SAML NameID”。

Error: Recipient in SAML response was blank or not valid(错误:SAML 响应中的收件人为空或无效)

如果 Recipient 与 您的 GitHub Enterprise Server 实例 的 ACS URL 不匹配,则当用户尝试验证时,身份验证日志中将显示以下两条错误消息之一:

Recipient in the SAML response must not be blank.
Recipient in the SAML response was not valid.

确保将 IdP 上 Recipient(收件人)的值设置为 您的 GitHub Enterprise Server 实例 的完整 ACS URL。 例如,https://ghe.corp.example.com/saml/consume

Error: "SAML Response is not signed or has been modified"(错误:“SAML 响应未签名或已修改”)

如果您的 IdP 未对 SAML 响应进行签名,或者签名与内容不匹配,则身份验证日志中将显示以下错误消息。

SAML Response is not signed or has been modified.

确保为 IdP 上的 GitHub Enterprise Server 应用程序配置签名的断言。

Error: "Audience is invalid" or "No assertion found"(错误:“受众无效”或“未找到断言”)

如果 IdP 的响应缺少 Audience 的值或者该值不正确,则身份验证日志中将显示以下错误消息。

Audience is invalid. Audience is invalid. Audience attribute does not match your_instance_url

确保将 IdP 上 Audience 的值设置为 您的 GitHub Enterprise Server 实例 的 EntityId,这是实例的完整 URL。 例如,https://ghe.corp.example.com