エラー: "Current time is earlier than NotBefore condition" (現在の時刻は NotBefore 条件より前です)
このエラーは、IdP と GitHub の間の時間差が大きすぎる場合に発生することがあります。これはセルフホステッド IdP でよく発生します。
このエラーが発生した場合は、IdP の時刻が NTP サーバーと適切に同期していることを確認します。
IdP の立場で ADFS を使っている場合は、GitHub のために ADFS の NotBeforeSkew
も 1 分に設定します。 NotBeforeSkew
を 0 に設定すると、ミリ秒などの非常に短い時間差でも認証の問題が発生する可能性があります。
ユーザーが繰り返し認証するようにリダイレクトされる
ユーザーが繰り返し SAML 認証プロンプトにリダイレクトされるループに陥る場合は、必要に応じて IdP 設定で SAML セッション期間を長くします。
SAML 応答で送信される SessionNotOnOrAfter
値によって、ユーザーが認証のために IdP にリダイレクトされるタイミングが決まります。 SAML セッションの継続時間が 2 時間以下に設定されている場合、GitHub は有効期限が切れる 5 分前に SAML セッションを更新します。 セッション期間を 5 分以下に構成した場合、ユーザーは SAML 認証ループから抜け出せなくなる可能性があります。
この問題を解決するには、最短 SAML セッション期間を 4 時間に構成することをお勧めします。 詳しくは、「SAML 構成リファレンス」をご覧ください。
プロビジョニングされていない、あるいはSCIMによってプロビジョニング解除されたユーザがいる
ユーザのプロビジョニングの問題が生じた場合、ユーザがSCIMのメタデータを欠いているかどうかをチェックすることをおすすめします。
SCIM プロビジョニングが組織に実装されている場合、ユーザーの組織メンバーシップに対する変更は ID プロバイダーが始める必要があります。 ユーザーが既存の SCIM 統合ではなく、手動で組織に招待された場合、ユーザー アカウントが SCIM ID に適切にリンクされない可能性があります。 これにより、将来、ユーザー アカウントが SCIM 経由でプロビジョニング解除されるのを防ぐことができます。 既存の SCIM 統合ではなくユーザーが手動で削除された場合、古いリンク ID が残り、ユーザーが組織に再参加する必要がある場合に問題が発生する可能性があります。
OrganizationのメンバーがSCIMのメタデータを欠いている場合は、IdPを通じてそのユーザに対し、手作業でSCIMをプロビジョニングし直すことができます。
SCIMメタデータを欠いたユーザの監査
期待どおりにプロビジョニングされていない、あるいはプロビジョニング解除されたユーザがいると考えられる、あるいはいることに気づいた場合は、Organizationのすべてのユーザを監査することをおすすめします。
ユーザーが SCIM ID (SCIMメタデータ) を外部アイデンティティに持っているかをチェックするには、GitHub上で 1 人ずつ organization メンバーの SCIM メタデータをレビューするか、GitHub API を使ってプログラムですべての organization メンバーをチェックできます。
IdP が GitHub SCIM API にプロビジョニング呼び出しを送信する場合、その API 呼び出しの SCIM userName
は、Organization 内のユーザーのリンクされた SAML ID に格納されている SAML nameID
と一致する必要があります。 これら 2 つの値が一致しない場合、SCIM メタデータは設定されず、SCIM ID は正常にリンクされません。 これらの値が一致するかどうかを確認するには、GitHub API を使用します。
GitHub上のOrganizationメンバーの監査
Organization の所有者として、1 人の Organization メンバーに SCIM メタデータがあることを確認するには、次の URL にアクセスし、<organization>
と <username>
を置き換えます。
https://github.com/orgs/<organization>/people/<username>/sso
ユーザの外部アイデンティティにSCIMメタデータが含まれているなら、そのページにはSCIMアイデンティティセクションが表示されるはずです。 外部アイデンティティにSCIMメタデータが含まれていないなら、SCIMアイデンティティセクションは存在しません。
GitHub APIを通じたOrganizationメンバーの監査
Organizationオーナーは、SCIM REST APIあるいはGraphQLでクエリを行い、SCIMでプロビジョニングされたOrganizationのすべてのアイデンティティをリストできます。
REST API を使用して
SCIM REST APIは、外部アイデンティティの下でSCIMメタデータが展開されているユーザのデータだけを返します。 Organizationの全メンバーのリストと、SCIMでプロビジョニングされているアイデンティティのリストを比較することをおすすめします。
詳細については、以下を参照してください:
GraphQLを利用する
この GraphQL クエリを実行すると、Organization 内の各ユーザーの SAML NameId
、SCIM UserName
、GitHub ユーザー名 (login
) が表示されます。 このクエリを使用するには、ORG
を実際の Organization 名に置き換えます。
{
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はそれらのユーザに対するSCIMメタデータをGitHubに展開するAPIコールを発行します。 詳細については、Okta ドキュメントの「Unassign users from applications」(アプリケーションからのユーザーの割り当て解除) または「Assign users to applications」(アプリケーションへのユーザーの割り当て) を参照してください。
ユーザのSCIMアイデンティティが作成されたことを確認するには、SCIMの外部アイデンティティを持っていないことが確認された一人のOrganizationメンバーで、このプロセスをテストすることをおすすめします。 手動でIdP内のユーザを更新したら、ユーザのSCIMアイデンティティが作成されたかをGitHub の SCIM APIを使ってチェックできます。 詳細については、「欠落している SCIM メタデータについてのユーザーの監査」または「SCIM の REST API エンドポイント」を参照してください。
ユーザのSCIMの再プロビジョニングでもうまくいかない場合は、GitHubサポートにお問い合わせください。
SAML ID の競合エラー
ユーザーが GitHub organization または Enterprise に初めてアクセスする際に SAML ID プロバイダー (IdP) の認証を受けようとすると、次のエラー メッセージが表示される場合があります。
Your GitHub user account [GitHub username] is currently unlinked. However, you are attempting to authenticate with your Identity Provider using [IdP user account] SAML identity which is already linked to a different GitHub user account in the [organization/enterprise]. Please reach out to one of your GitHub [organization/enterprise] owners for assistance.
IdP が Entra ID である場合、エラー メッセージには Entra ID のリンクされた ID の User Object ID
(GitHub では、External ID
と呼ばれます) が含まれます。
このエラー メッセージが発生するのは、外部 ID が organization または Enterprise 内の 1 つの GitHub ユーザー アカウントにのみリンクできるためです。
競合する ID を持つユーザーを特定する
ユーザーからこのエラーについて連絡があった場合は、以下の手順を実行して競合するアカウントを特定できます。
- GitHub GraphQL API を使って、競合する外部 ID にリンクされているユーザーを特定します。
- SAML が GitHub organization レベルで構成されている場合: organization 所有者は、organization レベルで既存の外部 ID を照会し、このエラーが発生したときにユーザーが認証に使っていた IdP アカウントの SAML
NameID
でフィルター処理する必要があります。platform-samples
リポジトリの org-saml-identities-filtered-by-nameid-username.graphql サンプルを参照してください。 - SAML が GitHub Enterprise レベルで構成されている場合: Enterprise 所有者は、Enterprise レベルで既存の外部 ID を照会し、このエラーが発生したときにユーザーが認証に使っていた IdP アカウントの SAML
NameID
でフィルター処理する必要があります。platform-samples
リポジトリの enterprise-saml-identities-filtered-by-nameid.graphql サンプルを参照してください。
- SAML が GitHub organization レベルで構成されている場合: organization 所有者は、organization レベルで既存の外部 ID を照会し、このエラーが発生したときにユーザーが認証に使っていた IdP アカウントの SAML
- 競合する外部 ID に関連付けられた GitHub ユーザーを特定した場合、Enterprise 所有者は、「Enterprise の人を表示する」の手順に従って、そのユーザーが Enterprise とその organization でまだアクティブかどうかを確認できます。
競合を解決する
手順に従って競合するアカウントを特定したら、結果に応じてさまざまな解決オプションがあります。 これらの手順を実行する際に issue が発生した場合、または不明な点がある場合は、GitHub Support ポータル を使って GitHub サポート チケットを開くことができます。
競合する GitHub ユーザーはアクセスする必要がなくなりました
競合する外部 ID に関連付けられた GitHub ユーザー アカウントがあり、GitHub organization または Enterprise にアクセスする必要がなくなった場合は、そのアカウントをメンバーから削除します。 ユーザーが適切に削除されると、リンクされた SAML ID と、リンクされた SCIM ID (organization レベルに存在する場合) も削除されます。
- SCIM プロビジョニングを使って organization のメンバーシップを管理している場合は、GitHub の手順に従うのではなく、SCIM を使って IdP からユーザーのプロビジョニングを解除する必要があります。 そうしないと、ユーザーのリンクされた SAML および SCIM ID が organization 内に残り、引き続きエラーが発生する可能性があります。
- Organization メンバーシップの管理に SCIM プロビジョニングを使っていない場合は、「Organization からメンバーを削除する」または「Enterprise からのメンバーの削除」を参照してください。 また、IdP 内の organization または Enterprise 用 GitHub アプリからユーザーのアクセスを必ず削除してください。
ユーザーの SAML または SCIM ID が GitHub organization から正常に削除されたことを確認する方法については、「組織の ID とアクセス管理のトラブルシューティング」を参照してください。
競合する GitHub ユーザーには引き続きアクセス権が必要です
競合する外部 ID に関連付けられた GitHub ユーザー アカウントがあり、このユーザーが引き続き organization または Enterprise にアクセスする必要がある場合は、ユーザー アカウントにリンクされた ID を変更するか、エラーを受け取っているユーザーに別の IdP ID の認証を受けてもらう必要があります。
- SCIM プロビジョニングを使って organization のメンバーシップを管理しており、メンバーの GitHub アカウントにリンクされている外部 ID を変更する必要がある場合は、IdP からユーザーのプロビジョニングを解除してから再プロビジョニングします (たとえば、アプリへのユーザーの割り当てを解除し、再割り当てします)。
- IdP ユーザーのプロビジョニングが解除されると、その GitHub アカウントとリンクされた SAML/SCIM ID は GitHub organization から削除されます。
- IdP ユーザーが GitHub organization に再プロビジョニングされると、新しい保留中の organization の招待と新しいリンクされていない SCIM ID が作成されます。 これにより、ユーザーはこの GitHub ユーザー アカウントを使ってサインインし、SAML 経由で認証を受け、新しい IdP ID を自分のアカウントにリンクできるようになります。 これらの手順を実行することで、新しい SAML ID と SCIM ID の両方を organization 内の GitHub ユーザー アカウントに適切にリンクすることができます。
- Organization のメンバーシップの管理に SCIM プロビジョニングを使っていない場合、または SAML が Enterprise レベルで構成されている場合は、次のいずれかの記事の手順に従って、ユーザーにリンクされた外部 ID を取り消すことができます。
競合する GitHub ユーザーが見つかりません
競合する外部 ID に関連付けられた GitHub ユーザー アカウントがない場合は、外部 ID を取り消すことができます。
- SCIM プロビジョニングを使って organization のメンバーシップを管理している場合は、リンクされていない古い ID を IdP から削除します (たとえば、IdP アプリからユーザーの割り当てを解除します)。
- IdP から GitHub に適切な SCIM API 呼び出しが送信されないと、ID が organization 内に残るため、引き続きエラーが発生する可能性があります。
- ユーザーの SAML または SCIM ID が GitHub organization から正常に削除されたことを確認する方法については、「組織の ID とアクセス管理のトラブルシューティング」を参照してください。
- Organization のメンバーシップの管理に SCIM プロビジョニングを使っていない場合、リンクされた外部 ID を取り消すには、以下の URL のいずれかに移動して外部 ID を取り消します。
USERNAME
を、サインインできないユーザーの GitHub ユーザー名に置き換え、ORGANIZATION
またはENTERPRISE
を、適切な値に置き換えます。https://github.com/orgs/ORGANIZATION/people/USERNAME/sso
https://github.com/enterprises/ENTERPRISE/people/USERNAME/sso