Skip to main content

排除组织的标识和访问管理故障

查看并解决用于管理组织的 SAML SSO、团队同步或身份提供商 (IdP) 连接的常见故障排除错误。

错误:“当前时间早于 NotBefore 条件”

当 IdP 与 GitHub Enterprise Cloud 之间的时间差太大时可能会发生此错误,这通常发生在自托管 IdP 中。

如果遇到此错误,请确保 IdP 上的时间与 NTP 服务器正确同步。

如果使用 ADFS 作为 IdP,则对于 GitHub,也将 ADFS 中的 NotBeforeSkew 设置为 1 分钟。 如果 NotBeforeSkew 设置为 0,即使非常小的时间差(包括几毫秒)也会导致身份验证问题。

用户反复重定向到身份验证

如果在循环中反复将用户重定向到 SAML 身份验证提示,则可能需要在 IdP 设置中增加 SAML 会话持续时间。

SAML 响应中发送的 SessionNotOnOrAfter 值决定何时将用户重定向回 IdP 进行身份验证。 如果 SAML 会话持续时间配置为 2 小时或更短,GitHub 将在 SAML 会话过期前 5 分钟刷新它。 如果会话持续时间配置为 5 分钟或更短,则用户可能会卡在 SAML 身份验证循环中。

若要解决此问题,建议将 SAML 会话的最短持续时间配置为 4 小时。 有关详细信息,请参阅“SAML 配置参考”。

某些用户未由 SCIM 预配或取消预配

遇到用户预配问题时,建议检查用户是否缺少 SCIM 元数据。

如果为组织实现了 SCIM 配置,则应从标识提供者触发对用户组织成员身份的任何更改。 如果用户手动而不是通过现有的 SCIM 集成被邀请到组织,他们的用户帐户可能无法正确链接到其 SCIM 标识。 这可以防止将来通过 SCIM 取消配置用户帐户。 如果手动删除用户而不是通过现有 SCIM 集成删除,则将保留陈旧的链接身份,如果用户需要重新加入组织,这可能会导致问题。

如果组织成员缺少 SCIM 元数据,则可以通过 IdP 手动为用户重新配置 SCIM。

审核用户是否缺少 SCIM 元数据

如果您怀疑或注意到任何用户未按预期进行预配或取消预配,我们建议您审核组织中的所有用户。

要检查用户的外部标识中是否具有 SCIM 标识(SCIM 元数据),可以在 GitHub 上一次检查一个组织成员的 SCIM 元数据,也可以使用 GitHub API 以编程方式检查所有组织成员。

当 IdP 将预配调用发送到 GitHub SCIM API 时,该 API 调用中的 SCIM userName 需要与组织中用户链接的 SAML 标识中存储的 SAML nameID 相匹配。 如果这两个值不匹配,则不会填充 SCIM 元数据,并且不会成功链接 SCIM 标识。 要检查这些值是否匹配,请使用 GitHub API。

审核 GitHub 上的组织成员

作为组织所有者,若要确认单个组织成员是否存在 SCIM 元数据,请访问此 URL,替换 <organization><username>

https://github.com/orgs/<organization>/people/<username>/sso

如果用户的外部标识包括 SCIM 元数据,则组织所有者应在该页面上看到 SCIM 标识部分。 如果其外部标识不包含任何 SCIM 元数据,则 SCIM 标识部分将不存在。

通过 GitHub API 审核组织成员

作为组织所有者,您还可以查询 SCIM REST API 或 GraphQL 以列出组织中的所有 SCIM 预配置标识。

使用 REST API

SCIM REST API 仅返回在其外部标识下填充了 SCIM 元数据的用户的数据。 我们建议您将 SCIM 预配置身份列表与组织所有成员的列表进行比较。

有关详细信息,请参阅:

使用 GraphQL

此 GraphQL 查询显示组织中每个用户的 SAML NameId、SCIM UserName 和 GitHub 用户名 (login)。 若要使用此查询,请将 ORG 替换为你的组织名称。

{
  organization(login: "ORG") {
    samlIdentityProvider {
      ssoUrl
      externalIdentities(first: 100) {
        edges {
          node {
            samlIdentity {
              nameId
            }
            scimIdentity {
              username
            }
            user {
              login
            }
          }
        }
      }
    }
  }
}
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -d '{ "query": "{ organization(login: \"ORG\") { samlIdentityProvider { externalIdentities(first: 100) { pageInfo { endCursor startCursor hasNextPage } edges { cursor node { samlIdentity { nameId } scimIdentity {username}  user { login } } } } } } }" }'  https://api.github.com/graphql

有关使用 GraphQL API 的更多信息,请参阅:

通过身份提供商为用户重新预配 SCIM

您可以通过 IdP 手动为用户重新预配 SCIM。 例如,要解决 Okta 的预配错误,可以在 Okta 管理门户中取消分配用户并将其重新分配给 GitHub 应用。 这应该会触发 Okta 进行 API 调用,以便在 GitHub 上为这些用户填充 SCIM 元数据。 有关详细信息,请参阅 Okta 文档中的“从应用程序取消分配用户”或“将用户分配给应用程序”。

要确认是否已创建用户的 SCIM 标识,我们建议您使用已确认没有 SCIM 外部标识的单个组织成员来测试此过程。 手动更新 IdP 中的用户后,您可以检查用户的 SCIM 身份是使用 SCIM API 创建的,还是在 GitHub 上创建的。 有关详细信息,请参阅“审核用户是否缺少 SCIM 元数据”或“SCIM 的 REST API 端点”。

如果为用户重新预配 SCIM 不起作用,请联系 GitHub 支持。

延伸阅读