メインコンテンツへスキップ
OIDCクライアントシークレット更新手順 ─ OAuthログイン停止とsecret漏えいを避ける確認方法
チュートリアル 中級

OIDCクライアントシークレット更新手順 ─ OAuthログイン停止とsecret漏えいを避ける確認方法

チュートリアル 中級

OIDC/OAuthクライアントシークレットの期限切れ・漏えい時に、停止を避けて安全に更新する実務手順。新旧secret併用、設定反映、ログ確認、旧secret無効化、PKCEや証明書・フェデレーション資格情報への移行判断、台帳整備まで整理します。

冒頭要約

OIDCOAuth 2.0で使うクライアントシークレットは、Webサーバー側アプリやバックエンドサービスが認可サーバーへ「自分は登録済みアプリである」と示すための資格情報です。値が期限切れになる、古い設定が残る、リポジトリやCIログへ漏れると、ログイン停止、トークン交換失敗、外部API連携停止、漏えい疑いの初動対応につながります。

まず確認するのは、対象アプリ、client ID、secretの用途、有効期限、保存先、利用している環境、ロールアウト方式、監査ログ、旧secretの無効化タイミングです。Googleの公式情報では、新旧secretを併用できる間にアプリを新secretへ移行し、ログや設定で旧secretが使われていないことを確認してから旧secretを無効化する流れが示されています。

この記事では、情シス、SaaS管理者、開発者、SRE向けに、OIDC/OAuthクライアントシークレットの更新手順、期限切れ・漏えい時の初動対応、判断基準、よくある誤解を整理します。攻撃再現、secretの悪用、認証回避、探索手順は扱いません。

secret値そのものをチケットやチャットに貼らない

調査・報告で必要なのは、secretの値ではなく、client ID、対象アプリ、credential ID、作成日時、有効期限、保存先、失効・再発行の時刻です。secret値をチャット、スクリーンショット、チケット本文へ貼ると、二次漏えいの原因になります。


読者別の影響:誰が何を見るべきか

クライアントシークレットは、ログイン画面の裏側、SaaS連携、CI/CD、バッチ処理、Webhook受信、外部API連携などに残りやすい資格情報です。単に「開発者が環境変数を差し替える」だけでなく、利用者影響、監査ログ、ロールバック、代替認証方式まで関係します。

読者・担当者まず見るもの見落としたときの問題
開発者アプリ設定、環境変数、secret manager、デプロイ済みバージョン新secretへ切り替えたつもりでも、一部Podやバッチが旧secretを使い続ける
SRE / DevOpsCI/CD secrets、Kubernetes Secret、クラウドSecret Manager、ロールアウト状況デプロイ失敗、トークン交換失敗、夜間バッチ停止、復旧経路喪失が起きる
情シス・SaaS管理者OAuthクライアント一覧、client ID、所有者、リダイレクトURI、利用部門退職者所有のアプリ、用途不明のsecret、古い連携が残る
セキュリティ担当secretの保存先、権限、scope、最終利用、監査ログ、漏えい検知失効対象を誤り、実際に使われた可能性のある経路を見落とす
ヘルプデスク利用者影響、ログイン失敗文言、問い合わせ時刻、回避策「パスワードリセットで直る」と誤案内し、初動が遅れる

基礎用語を整理したい場合は、OAuth 2.0OpenID ConnectJWTAccess TokenRefresh Tokenを先に確認してください。SAML証明書更新との違いは、SAMLとOIDCの違い前回の記事が参考になります。


クライアントシークレットとは:OIDC、OAuth、SAML証明書との違い

OIDCはOAuth 2.0の上に認証レイヤーを追加する標準で、ID Tokenを使って「誰がログインしたか」を伝えます。一方、OAuth 2.0は「どのアプリに、どの範囲のアクセスを許可するか」という認可の仕組みです。どちらも、サーバー側アプリがトークンエンドポイントで自分を認証するために、client secretを使う場合があります。

実務では、次の違いを混同しないことが重要です。

用語主な意味確認ポイント
client IDアプリを識別する公開寄りのID値自体はsecretではないが、誤ったアプリと混同しない
client secretconfidential clientが認可サーバーへ提示する共有secret保存先、有効期限、利用環境、旧secret無効化タイミングを確認する
redirect URI認可コードや応答を返す先本番・検証・ローカルの登録差分、不要URI、HTTPSを確認する
access tokenAPIアクセスに使う短命トークンscope、audience、有効期限、漏えい時の失効可否を確認する
refresh tokenaccess tokenを再取得するためのトークン長期利用、保存先、ローテーション、失効手順を確認する
SAML証明書SAML response/assertionなどの署名検証に使う証明書metadata、証明書期限、SP側更新、署名方式を確認する

IETF OAuth 2.0仕様では、confidential clientは資格情報を安全に保持できるクライアント、public clientは保持できないクライアントとして扱われます。GitHubの公式情報も、Webアプリなどのconfidential clientではsecretを安全な保管先に置く一方、ネイティブアプリ、CLI、SPAのようなpublic clientではsecretを安全に守れないため、PKCEを使うべきだと説明しています。

public clientにclient secretを置いても秘密にはならない

ブラウザSPA、モバイルアプリ、デスクトップアプリ、CLIに埋め込んだsecretは、利用者環境へ配布されます。名前にsecretと付いていても安全に秘匿できないため、PKCE、BFF、サーバー側トークン交換、別方式への移行を検討します。


まず確認すること:OIDC/OAuth secret更新チェックリスト

期限切れ通知、漏えい疑い、Secret Scanningアラート、SaaS連携停止を受け取ったら、いきなり旧secretを削除せず、次の項目を台帳化します。

確認項目見るポイント記録すること
1. 対象アプリOAuthクライアント名、client ID、所有部門、利用サービスアプリ名、client ID、環境、本番/検証
2. 用途ログイン、API連携、バックエンドバッチ、CI/CD、Webhook認証方式、利用フロー、利用者影響
3. 有効期限期限切れまでの日数、通知先、過去の更新履歴有効期限、作成日時、credential ID
4. 保存先secret manager、環境変数、CI/CD secret、Kubernetes Secret、設定ファイル保存場所、参照しているサービス、更新担当
5. ロールアウト新旧secret併用可否、最大secret数、反映遅延、再起動要否切替手順、影響範囲、戻し条件
6. ログ確認トークンエンドポイント失敗、sign-in log、APIログ、アプリログ成功/失敗時刻、エラー種別、旧secret使用有無
7. 旧secret無効化、削除、再有効化可否、削除期限無効化時刻、削除時刻、承認者
8. 漏えい疑いリポジトリ、CIログ、チャット、端末、チケットへの露出露出場所、発見者、失効・再発行時刻
9. 代替方式証明書、フェデレーション資格情報、Workload Identity、PKCE移行可否、期限、担当者
10. 連絡影響ユーザー、ヘルプデスク、開発チーム、SaaSオーナー周知文、問い合わせ先、変更チケット

Microsoft Entraの公式情報では、アプリ資格情報の期限切れが近い場合、アプリ登録のCertificates & secretsから新しい証明書またはclient secretを追加し、サービスコードを新資格情報へ更新し、サインインログで新しいKey IDを確認してから旧資格情報を削除する流れが示されています。Googleの公式情報では、OAuthクライアントは最大2つのclient secretを持てるため、新secretを作り、アプリ設定・ログ・ロールアウト状況を確認してから旧secretを無効化・削除する手順になっています。


初動対応:やること、やらないこと、記録すること

やること

  • 期限切れ通知や漏えい疑いを受けたら、対象client ID、環境、保存先、所有者、利用フローを確認する。
  • 新secretを作成したら、secret managerやCI/CD secretsなど正規の保管先へ登録し、コードやチャットに値を残さない。
  • 本番へ反映する前に、検証環境または限定された本番経路でトークン交換、ログイン、API呼び出しを確認する。
  • 新旧secretを併用できる場合は、旧secretが使われなくなったことをアプリログ、認可サーバーログ、ロールアウト状況で確認する。
  • 旧secretを無効化した直後は、ログイン失敗、バッチ失敗、APIエラー、ヘルプデスク問い合わせを監視する。
  • 本番で長期secretを使い続けている場合は、証明書、フェデレーション資格情報、Workload Identity、短命トークンへ置き換えられるか検討する。

やらないこと

  • 期限切れ直前に、テストなしで旧secretを削除しない。
  • secret値をチケット、チャット、issue、PR、Wiki、手順書に貼らない。
  • client_idclient_secret を混同し、公開してよい値と秘匿すべき値を同じ扱いにしない。
  • public clientにsecretを埋め込んで「秘匿できている」と扱わない。
  • 漏えい疑いのあるsecretで、第三者環境や本番APIへ「使えるか」を試さない。
  • 旧secretを無期限に残して「ロールバック用」と呼ばない。

記録すること

記録項目
対象client ID、アプリ名、環境、所有者、利用フロー
secretcredential ID、作成日時、有効期限、保存先、旧/新の区別
作業作成、設定反映、デプロイ、検証、無効化、削除の時刻
ログトークン交換成功/失敗、sign-in log、APIエラー、アプリログ
判断継続、ロールバック、旧secret削除延期、方式移行、CSIRT連携

GitHubリポジトリやCI/CDログにsecretが出た疑いがある場合は、GitHub secret leak対応チェックリストGitHub Secret Scanningアラート初動対応を併用してください。開発ツールや依存関係侵害をきっかけに資格情報を見直す場合は、開発ツール・OSSサプライチェーン確認チェックリストへ進むと、CI/CDやクラウド資格情報まで広げて確認できます。


判断基準:優先度とエスカレーション条件

クライアントシークレット更新の優先度は、期限までの日数だけでは決まりません。対象アプリの重要度、secretの権限、漏えい可能性、代替手段で判断します。

優先度状況初動判断
期限切れまで7日以内、またはすでに期限切れ変更枠を確保し、所有者、SRE、ヘルプデスク、セキュリティ担当を同じチケットに入れる
production login、顧客向けSaaS、決済、クラウド管理、GitHub連携で使う新secret作成とログ確認を優先し、失敗時のロールバック条件を決める
secretがリポジトリ、CIログ、チャット、端末、チケットへ露出した疑いがある漏えい疑いとして失効・再発行し、利用ログと影響範囲を確認する
public clientにsecretが埋め込まれているsecret前提をやめ、PKCEやサーバー側フローへ設計変更を検討する
新旧secret併用は可能だが、旧secret使用有無のログが不足している監視期間を設け、アプリログ・認可サーバーログ・メトリクスを追加確認する
検証環境、期限まで60日以上、所有者と保存先が明確通常変更として計画し、台帳と通知先を更新する

Microsoft Entraでは、client secret lifetimeは24か月以下で、12か月未満の期限設定が推奨されています。また、本番ではclient secretよりも証明書やフェデレーション資格情報を優先する説明があります。つまり、期限切れ対応を単発作業で終わらせず、「このsecretを今後も持ち続けるべきか」を合わせて判断します。


よくある誤解

「client IDが漏れたので即インシデント」

client IDはアプリ識別子であり、通常はclient secretほど秘匿性が高い値ではありません。ただし、client ID、redirect URI、アプリ名、scope、secretがセットで漏れると影響が変わります。値ごとに扱いを分けます。

「secretを再発行したので旧secretはすぐ消してよい」

アプリ、バッチ、CI/CD、古いPod、ジョブワーカーが旧secretを使っている場合、即削除で停止します。新secretが全経路で使われていることをログで確認してから旧secretを無効化します。

「環境変数に入れているから安全」

環境変数は便利ですが、ログ出力、クラッシュダンプ、管理画面、CI/CD設定、権限の広い閲覧者から見える場合があります。専用のsecret manager、アクセス制御、監査ログ、ローテーションを合わせて考えます。

「SPAにclient secretを入れればセキュリティが上がる」

SPAやモバイルアプリはpublic clientであり、配布されたコードや端末上の値を安全に秘匿できません。PKCEやBFF、サーバー側トークン交換を検討します。

「PKCEを使えばclient secretは不要な場面でも全て安全」

PKCEはpublic clientの認可コード横取りリスクを下げる仕組みですが、すべての認可・認証リスクを解決するものではありません。redirect URI、state、nonce、token保存、scope、セッション管理も確認します。


関連用語・関連ページ

目的ページ
用語を確認するOAuth 2.0OpenID ConnectJWTAccess TokenRefresh Token
secret管理を確認するSecrets ManagementSecret ScanningWorkload Identity
方式の違いを整理するOAuthとOIDCの違いSAMLとOIDCの違い認証と認可の違い
実務チェックへ進むGitHub secret leak対応チェックリスト開発ツール・OSSサプライチェーン確認チェックリストSaaS権限棚卸しチェックリスト
関連記事を読むGitHub Secret Scanningアラート初動対応OAuth同意フィッシングSAML証明書・SSO証明書の期限切れ対応
演習で確認するGitHub secret leak 初動ミニCTF認証と認可のミニCTFクイズで用語を復習する

公式情報・参考情報


まとめ

OIDC/OAuthクライアントシークレットの更新は、「新しい値を作って環境変数を差し替える」だけでは終わりません。対象アプリ、client ID、保存先、利用環境、ロールアウト、ログ確認、旧secret無効化、削除、漏えい疑いの有無まで一連の変更として扱います。

特に、本番ログインや外部API連携、CI/CD、クラウド管理で使うsecretは、期限切れ前から台帳化し、通知先と所有者を明確にします。漏えい疑いがある場合は、secret値を共有せず、失効・再発行、ログ確認、再発防止を優先します。

次に実務へ落とすなら、GitHub secret leak対応チェックリストに「OIDC/OAuth client secret」「保存先」「旧secret使用有無」「PKCE・フェデレーション資格情報への移行可否」を追加し、四半期ごとのSaaS・開発基盤棚卸しで確認してください。

関連テーマを体系的に学ぶ 認証とパスキー(パスワードレス)ガイド
ESC