Skip to main content

SAML認証

SAML シングル サインオン (SSO) を使っていて、ユーザーが お使いの GitHub Enterprise Server インスタンス にアクセスするための認証を行うことができない場合、問題のトラブルシューティングを行うことができます。

SAML 認証に関する問題について

GitHub Enterprise Server は、失敗した SAML 認証のエラー メッセージを github-unicorn コンテナ の systemd ジャーナル ログ に記録します。 このログで応答を確認でき、より詳細なログを構成することもできます。

SAML 応答の要件について詳しくは、「SAML 構成リファレンス」をご覧ください。

SAML デバッグの構成

SAML 認証が試行されるたびに詳細デバッグ ログを書き込むよう、GitHub Enterprise Server を構成できます。 この追加の出力を使用して、失敗した認証試行のトラブルシューティングを行うことができる場合があります。

Warning

  • SAML デバッグは一時的にのみ有効にし、トラブルシューティングが完了したらすぐにデバッグを無効にします。 デバッグを有効にしたままにすると、 ログ のサイズが通常よりもはるかに速く増加し、GitHub Enterprise Server のパフォーマンスに悪影響を与える可能性があります。
  • 運用環境で設定を適用する前に、ステージング環境で お使いの GitHub Enterprise Server インスタンスの新しい認証設定をテストします。 詳しくは、「ステージングインスタンスのセットアップ」をご覧ください。
  1. GitHub Enterprise Server の右上で、ご自分のプロフィール フォトをクリックしてから、 [Enterprise 設定] をクリックします。

    GitHub Enterprise Server のプロファイル写真をクリックしたときに表示されるドロップダウン メニューのスクリーンショット。 [エンタープライズ設定] オプションが濃いオレンジ色の枠線で強調表示されています。

  2. ページの左側にある Enterprise アカウントのサイドバーで、 [ポリシー] をクリックします。

  3. [ポリシー] で、[オプション] をクリックします。

  4. [SAML デバッグ] でドロップダウンを選択し、 [有効] をクリックします。

  5. SAML IdP を介して お使いの GitHub Enterprise Server インスタンスへのサインインを試みます。

  6. github-unicorn の systemd ジャーナル の お使いの GitHub Enterprise Server インスタンス のデバッグ出力を確認します。 詳しくは、「システム ログについて」をご覧ください。

  7. トラブルシューティングが完了したら、ドロップダウンを選択し、 [無効] をクリックします。

応答のデコード

github-unicorn の systemd ジャーナル の一部の出力は Base64 でエンコードされている可能性があります。 管理シェルにアクセスし、お使いの GitHub Enterprise Server インスタンスの base64 ユーティリティを使用して、これらの応答をデコードできます。 詳しくは、「管理シェル (SSH) にアクセスする」をご覧ください。

出力をデコードするには、次のコマンドを実行し、ENCODED_OUTPUT をログからエンコードされた出力に置き換えます。

base64 --decode ENCODED_OUTPUT

エラー:「別のユーザがすでにアカウントを所有しています」

ユーザーが SAML 認証を使って初めて お使いの GitHub Enterprise Server インスタンスにサインインすると、GitHub Enterprise Server によってインスタンスにユーザー アカウントが作成され、SAML NameIDnameid-format がアカウントにマップされます。

ユーザーが再びサインインすると、GitHub Enterprise Server は、アカウントの NameIDnameid-format のマッピングと IdP の応答を比較します。 IdP の応答内の NameID または nameid-format が、GitHub Enterprise Server がユーザーに対して想定する値と一致しなくなると、サインインは失敗します。 ユーザには次のメッセージが表示されます。

別のユーザが既にアカウントを所有しています。 管理者に認証ログを確認するようご依頼ください。

このメッセージは通常、その人のユーザ名またはメールアドレスが IdP で変更されたということを示します。 GitHub Enterprise Server のユーザー アカウントの NameIDnameid-format のマッピングと、IdP 上のユーザーの NameIDnameid-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 に設定すると、ミリ秒などの非常に短い時間差でも認証の問題が発生する可能性があります。