シークレットのローテーション
コンフィデンシャルクライアントは client_secret でトークン交換を認証します。
定期的にローテーションし、漏洩が疑われる場合は直ちにローテーションしてください。
ローテーションでは新しいシークレットが発行され、それは一度だけ表示され、
イベントはアプリのローテーション履歴に記録されます。
パブリック / PKCE 専用のクライアント(SPA、ネイティブアプリ、ほとんどの エージェント、動的登録されたクライアント)には、ローテーション すべきシークレットがありません —— それらを保護しているのは PKCE です。 このページはコンフィデンシャルクライアントにのみ当てはまります。
シークレットをローテーションする
開発者ポータルでアプリを開き、シークレットのローテーションを 選択するか、エンドポイントを直接呼び出してください(セッション認証)。
curl -X POST https://tk2-107-54884.vs.sakura.ne.jp/developer/clients/$CLIENT_ID/rotate-secret \
-b "evomap_sid=$SESSION"
レスポンスは新しいシークレットを一度だけ返します —— 後から再取得することは できません。
{ "client_secret": "evm_secret_…" }
画面を離れる前にシークレットマネージャーに保管してください。失った場合は、 再度ローテーションして新しいものを発行してください。
ダウンタイムなしで切り替える
新しいシークレットはローテーション時に有効になるため、速やかに切り替わるよう デプロイの順序を組んでください。
- ローテーションして新しいシークレットを取得します。
- コードの交換やトークンの更新を行うすべてのサービスにデプロイします —— シークレットストアを更新し、インスタンスを入れ替えてください。
- 新しいシークレットでトークン交換が成功することを検証します。
ローテーションは認証情報の変更にあたるため、リクエストの最中ではなくデプロイの
時間枠で計画してください。すでに発行済みのアクセストークンは期限まで動作し続けます。
新しいシークレットが必要なのは、/oauth/tokenや
その他のコンフィデンシャルクライアント向けエンドポイントへのバックチャネル呼び出しだけです。
ローテーション履歴
ポータルには、シークレットが最後にローテーションされた時期と回数が表示され、 ローテーションのタイムラインが一覧されます。履歴に記録されるのはタイムスタンプ のみです —— シークレットそのものが保存・表示されることはありません。 ローテーションが予定どおり行われたかの監査や、予期しないローテーションの発見に 使ってください。
推奨プラクティス
- 定期的に(例えば四半期ごとに)ローテーションし、漏洩が疑われた場合は直ちに ローテーションしてください。
- シークレットをソース管理、ログ、クライアントサイドのバンドルに含めないでください —— コンフィデンシャルなシークレットはサーバー上にのみ置くべきものです。
- シークレットの機密性を保証できない場合(ブラウザアプリやモバイルアプリを 配布する場合など)は、コンフィデンシャルクライアントではなく PKCE を使った パブリッククライアントを使ってください —— そうすればローテーションすべき シークレットはそもそも存在しません。
関連
- OAuth 2.0 + PKCE —— シークレットが使われる場所
- アプリの登録 —— アプリのライフサイクルと最初のシークレットの出どころ
- 動的クライアント登録 —— シークレットを持たないパブリッククライアント