Auth0では、コンプライアンスを強化するため、また、秘密鍵の漏洩によってセキュリティが損なわれないように、定期的な鍵素材のローテーションを推奨しています。やを使用すると、新しい鍵にローテーションして使うことができます。新しい資格情報を作成し、private_key_jwtでの認証方法と関連付けて、未使用または古い資格情報を削除する必要があります。
アプリケーションでのストレージは、現在、一度に2つの資格情報までに制限されています。新しい資格情報を繰り返しローテーションするには、使用していない資格情報を削除する必要があります。
Auth0 Dashboardの使用
Management APIの使用
Auth0 Dashboardでアプリケーションの資格情報をローテーションする方法:
-
[Auth0 Dashboard] > [Applications(アプリケーション)] > [Applications(アプリケーション)]に移動し、更新したいアプリケーションを選択します。
-
[Credentials(資格情報)] タブに切り替えます。
-
[Available Credentials(利用可能な資格情報)] セクションで、[Add New Key(新しいキーを追加)] を選択します。
-
新しい資格情報の名前、PEM形式の公開鍵、新しい資格情報のアルゴリズムを設定します。
-
[Add Credential(資格情報の追加)] を選択します。
-
新しい資格情報を有効にするには、資格情報のメニューに移動し、[Enable for Private Key JWT use(秘密鍵JWTの使用を有効にする)] を選択します。
-
新しい資格情報を使用するためにアプリケーションを更新したら、元の資格情報は無効にします。
- [Disable for Private Key JWT Use(秘密鍵JWTの使用を無効にする)] を選択します。
- 無効にしたら、資格情報のメニューに戻り、[Delete Credential(資格情報の削除)] を選択します。
下のローテーション例は、credentialは使用している既存の資格情報、credential2は既存の資格情報に代わる新しい資格情報です。
-
新しいキーペアを生成します。
-
Management APIに対して
POST要求を使用して、資格情報リソースを作成します。
アプリケーションでの保管は現在、一度に2つの資格情報までに制限されています。新しい資格情報を繰り返しローテーションするには、使用していない資格情報を削除する必要があります。
-
Management APIのクライアントの更新エンドポイントにPATCH要求を行い、認証方法
private_key_jwtに資格情報を関連付けます。
curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId} \
--header 'Authorization: Bearer {managementApiAccessToken} \
--header 'Content-Type: application/json' \
--data-raw '{
"client_authentication_methods": {
"private_key_jwt": {
"credentials": [{ "id": {credentialId1} }, { "id": {credentialId2} }]
}
}
}'
| パラメーター | 説明 |
|---|
clientId | 更新したいアプリケーション。 |
credentialId1 | 使用している既存の資格情報のID。 |
credentialId2 | 新しい資格情報のID。 |
managementApiAccessToken | update:clientsとupdate:credentialsのスコープを持つManagement APIのアクセストークン。 |
-
アプリケーションを更新し、新しい秘密鍵を使用して、Auth0認証APIに対してアサーションを署名します。
-
使用していないキーをアプリケーションから削除します。
curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId} \
--header 'Authorization: Bearer $management_access_token' \
--header 'Content-Type: application/json' \
--data-raw '{
"client_authentication_methods": {
"private_key_jwt": {
"credentials": [{ "id": {credentialId2} }]
}
}
}'
-
使用していないキーをアプリケーションから削除します。これにより、ストレージから資格情報を永久に削除します。資格情報をアプリケーションから解除しなければ、削除できません。
curl --location --request DELETE 'https://{domain}/api/v2/clients/{clientId}/credentials/{credentialId}' \
--header 'Authorization: Bearer {managementApiAccessToken}
| パラメーター | 説明 |
|---|
clientId | 更新したいアプリケーション。 |
credentialId | 削除したい古い資格情報のID。 |
managementApiAccessToken | delete:credentialsのスコープを持つManagement APIのアクセストークン。 |
アクティブな資格情報
ダウンタイムが発生しないように、ローテーション中は複数の資格情報がアクティブであっても構いません。鍵が更新されるまでは、アプリケーションが古い鍵を使用しても正常に動作します。アプリケーションは、アクティブであればどのような資格情報を使っても、署名のあるアサーションを送信することができます。
ただし、複数の資格情報が使われる時間は最小限に留めることをお勧めします。以下は、複数の資格情報を使用している例です。
curl --location --request PATCH 'https://$tenant/api/v2/clients/$client_id' \
--header 'Authorization: Bearer $management_access_token' \
--header 'Content-Type: application/json' \
--data-raw '{
"client_authentication_methods": {
"private_key_jwt": {
"credentials": [{ "id": $credential1.id }, { "id": $credential2.id }]
}
}
}'
もっと詳しく