メインコンテンツまでスキップ

署名鍵のローテーション (OSS)

注記:

Logto Cloud を利用している場合は、Console UI で署名鍵のローテーションが可能です。詳しくは このチュートリアル を参照してください。

Logto OSS では v1.8 から署名鍵のローテーションがサポートされています。

Logto OIDC 署名鍵(「OIDC プライベート鍵」や「OIDC クッキー鍵」とも呼ばれます)は、Logto のサインインセッションで JWT(アクセス トークン (Access token)、ID トークン (ID token))やブラウザクッキーに署名するために使用される鍵です。

署名鍵を定期的にローテーションすることで、鍵漏洩のリスクを低減できます。Logto では、少なくとも年に一度は署名鍵をローテーションすることを推奨しています。

OIDC プライベート署名鍵のローテーション​

以下の CLI コマンドを使用して、新しい OIDC プライベート署名鍵を生成します。デフォルトでは、新しい鍵は即座に有効になります。ローテーションを段階的に行い、クライアントが新しい鍵で JWT に署名される前に JWKS をリフレッシュする時間を確保したい場合は、グレースピリオドを設定してください。

利用可能なオプション:

--type (任意) JWT の署名鍵アルゴリズム。
"rsa" または "ec" を指定可能。デフォルトは "ec"。
--gracePeriod (任意) プライベート鍵ローテーションのグレースピリオド(秒)。
デフォルトは PRIVATE_KEY_ROTATION_GRACE_PERIOD 環境変数、未設定の場合は 0。
logto db config rotate oidc.privateKeys --type rsa

例えば、新しいプライベート鍵を 4 時間後に有効化するよう段階的にローテーションする場合:

logto db config rotate oidc.privateKeys --type rsa --gracePeriod 14400

プライベート鍵ローテーションのデフォルトのグレースピリオドは、環境変数で設定することもできます:

PRIVATE_KEY_ROTATION_GRACE_PERIOD=14400

この環境変数は、Admin Console や Management API でローテーションする場合は Logto サービスに、CLI でローテーションする場合はコマンドを実行するシェルに設定してください。

以下の CLI コマンドを使用して、新しい OIDC クッキー鍵を生成します。クッキー鍵のローテーションにはグレースピリオドはサポートされていません。

logto db config rotate oidc.cookieKeys

以前の鍵はどうなりますか?​

OIDC プライベート鍵の場合、Logto は段階的なローテーション中に最大 3 つの鍵を保持します:

  • Next: グレースピリオド終了待ちの新しい鍵。
  • Current: 新たに発行される JWT の署名に現在使用されている鍵。
  • Previous: 直近でローテーションされた鍵で、既存の JWT を有効に保つために保持されます。

グレースピリオド終了後、Next 鍵が Current となり、古い Current 鍵が Previous となり、最も古い Previous 鍵は削除されます。

クッキー鍵の場合、Logto は現在の鍵と前回の鍵を保持します。前回の鍵を削除する際は、予期しない問題が発生する可能性があるため注意してください。すべての既存セッションやトークンが失効したことを確認するまで、前回の鍵を保持することを推奨します。

トラブルシューティング​

Cloudflare Zero Trust で Logto を OIDC プロバイダーとして利用する場合​

Cloudflare Zero Trust で Logto を OIDC プロバイダーとして利用する場合、ECDSA アルゴリズムを使用する OIDC プロバイダーはサポートされていない点にご注意ください。OIDC プライベート署名鍵をローテーションする際は、ローテーションコマンドで --type rsa を指定し、RSA アルゴリズムを使用してください:

logto db config rotate oidc.privateKeys --type rsa