SAML 認証に関する問題について
GitHub Enterprise Server は、失敗した SAML 認証のエラー メッセージを github-unicorn
コンテナ の systemd ジャーナル ログ に記録します。 このログで応答を確認でき、より詳細なログを構成することもできます。
SAML 応答の要件について詳しくは、「SAML 構成リファレンス」をご覧ください。
SAML デバッグの構成
SAML 認証が試行されるたびに詳細デバッグ ログを書き込むよう、GitHub Enterprise Server を構成できます。 この追加の出力を使用して、失敗した認証試行のトラブルシューティングを行うことができる場合があります。
Warning
- SAML デバッグは一時的にのみ有効にし、トラブルシューティングが完了したらすぐにデバッグを無効にします。 デバッグを有効にしたままにすると、 ログ のサイズが通常よりもはるかに速く増加し、GitHub Enterprise Server のパフォーマンスに悪影響を与える可能性があります。
- 運用環境で設定を適用する前に、ステージング環境で お使いの GitHub Enterprise Server インスタンスの新しい認証設定をテストします。 詳しくは、「ステージングインスタンスのセットアップ」をご覧ください。
-
GitHub Enterprise Server の右上で、ご自分のプロフィール フォトをクリックしてから、 [Enterprise 設定] をクリックします。
-
ページの左側にある Enterprise アカウントのサイドバーで、 [ポリシー] をクリックします。
-
[ポリシー] で、[オプション] をクリックします。
-
[SAML デバッグ] でドロップダウンを選択し、 [有効] をクリックします。
-
SAML IdP を介して お使いの GitHub Enterprise Server インスタンスへのサインインを試みます。
-
github-unicorn
の systemd ジャーナル の お使いの GitHub Enterprise Server インスタンス のデバッグ出力を確認します。 詳しくは、「システム ログについて」をご覧ください。 -
トラブルシューティングが完了したら、ドロップダウンを選択し、 [無効] をクリックします。
応答のデコード
github-unicorn
の systemd ジャーナル の一部の出力は Base64 でエンコードされている可能性があります。 管理シェルにアクセスし、お使いの GitHub Enterprise Server インスタンスの base64
ユーティリティを使用して、これらの応答をデコードできます。 詳しくは、「管理シェル (SSH) にアクセスする」をご覧ください。
出力をデコードするには、次のコマンドを実行し、ENCODED_OUTPUT をログからエンコードされた出力に置き換えます。
base64 --decode ENCODED_OUTPUT
エラー:「別のユーザがすでにアカウントを所有しています」
ユーザーが SAML 認証を使って初めて お使いの GitHub Enterprise Server インスタンスにサインインすると、GitHub Enterprise Server によってインスタンスにユーザー アカウントが作成され、SAML NameID
と nameid-format
がアカウントにマップされます。
ユーザーが再びサインインすると、GitHub Enterprise Server は、アカウントの NameID
と nameid-format
のマッピングと IdP の応答を比較します。 IdP の応答内の NameID
または nameid-format
が、GitHub Enterprise Server がユーザーに対して想定する値と一致しなくなると、サインインは失敗します。 ユーザには次のメッセージが表示されます。
別のユーザが既にアカウントを所有しています。 管理者に認証ログを確認するようご依頼ください。
このメッセージは通常、その人のユーザ名またはメールアドレスが IdP で変更されたということを示します。 GitHub Enterprise Server のユーザー アカウントの NameID
と nameid-format
のマッピングと、IdP 上のユーザーの NameID
と nameid-format
が一致していることを確認します。 詳しくは、「ユーザーの SAML NameID の更新」をご覧ください。
SAMLレスポンスが署名されていなかった場合、あるいは署名が内容とマッチしなかった場合、authログに以下のエラーメッセージが残されます。
Recipient
が お使いの GitHub Enterprise Server インスタンスの ACS URL と一致しない場合、ユーザーが認証を試みたときに、次の 2 つのエラー メッセージのいずれかが認証ログに表示されます。
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
のようにします。
エラー:「SAML レスポンスが署名されていないか、変更されています」
IdP が SAML レスポンスに署名しない場合、または署名が内容と一致しない場合、次のエラーメッセージが認証ログに表示されます。
SAML Response is not signed or has been modified.
IdP で GitHub Enterprise Server アプリケーションの署名済みアサーションを設定していることを確認してください。
エラー:「Audience が無効です」または「アサーションが見つかりません」
IdP の応答に Audience
の値がないか、または正しくない場合は、認証ログに次のエラー メッセージが表示されます。
Audience is invalid. Audience attribute does not match https://YOUR-INSTANCE-URL
IdP の Audience
の値を お使いの GitHub Enterprise Server インスタンスの EntityId
に設定します。これは、インスタンスの完全な URL です。 たとえば、https://ghe.corp.example.com
のようにします。
エラー: "Current time is earlier than NotBefore condition" (現在の時刻は NotBefore 条件より前です)
このエラーは、IdP と GitHub Enterprise Server の間の時間差が大きすぎる場合に発生することがあります。これはセルフホステッド IdP でよく発生します。
この問題を防ぐには、可能であれば、IdP と同じネットワーク タイム プロトコル (NTP) ソースを指すようにアプライアンスを設定することをお勧めします。 このエラーが発生した場合は、アプライアンスの時刻が NTP サーバーと適切に同期していることを確認します。 管理シェル上の chronyc
コマンドを使用すれば、時間を直ちに同期させることができます。 詳しくは、「時間の同期を構成する」をご覧ください。
IdP の立場で ADFS を使っている場合は、GitHub のために ADFS の NotBeforeSkew
も 1 分に設定します。 NotBeforeSkew
を 0 に設定すると、ミリ秒などの非常に短い時間差でも認証の問題が発生する可能性があります。