秘密鍵JWT認証の設定
秘密鍵JWT認証は、非対称鍵ペアで署名されたJWTアサーションを使用して、OIDC Connect Core Client Authentication 1.0によるクライアント認証をサポートします。新しいアプリケーションを作成してprivate_key_jwt
を使用するか、既存のアプリケーションで認証に秘密鍵ペアを使用するように設定することができます。
前提条件
秘密鍵JWTを使用するようにアプリケーションを構成する前に、RSA鍵ペアを生成する必要があります。
秘密鍵JWTを構成する
Auth0 Dashboardを使用して、新しいアプリケーションを作成することができ、資格情報の構成や既存アプリケーションの更新にも使用できます。
秘密鍵JWTにアプリケーション資格情報方法を設定する前に、現在のclient_secret
パラメーターを安全に保存することをお勧めします。client_secret
パラメーターは、秘密鍵JWTの構成が完了すると非表示になります。
private_key_jwt
に対する新しいアプリケーションの構成
[Auth0 Dashboard] > [Applications(アプリケーション)] > [Application(アプリケーション)]に移動します。
[Create Application(アプリケーションの作成)]を選択します。
アプリケーションタイプを選択します。
アプリケーション設定の下にある、[Credentials(資格情報)]タブを選択します。
[Authentication Methods(認証方法)]の下にある、[Private Key JWT(秘密鍵JWT)]を選択します。
資格情報の詳細を構成します。
資格情報の名前を入力します。
PEMフォーマットまたはX.509証明書をアップロードします。
アサーションに署名するアルゴリズムを選択します。
任意:カスタム有効期限を有効にします。[Set an explicit expiry date for this Credential(この資格情報への明確な有効期限の設定)]を選択し、未来の日付を設定します。
[Add Credential(資格情報の追加)]を選択します。
既存のアプリケーションの構成
更新したいアプリケーションを選択します。
[Credentials(資格情報)]タブを選択します。
[Private Key JWT(秘密鍵JWT)]を選択します。
資格情報の詳細を構成します。
資格情報の名前を入力します。
PEMフォーマットまたはX.509証明書をアップロードします。
アサーションに署名するアルゴリズムを選択します。
任意:カスタム有効期限を有効にします。[Set an explicit expiry date for this Credential(この資格情報への明確な有効期限の設定)]を選択し、未来の日付を設定します。
[Add Credential(資格情報の追加)]を選択します。
クライアントシークレット認証の使用のためのアプリケーションの構成
[Auth0 Dashboard] > [Applications(アプリケーション)] > [Applications(アプリケーション)]に移動し、更新したいアプリケーションを選択します。
[Credentials(資格情報)]タブを選択します。
クライアントシークレット(Post)またはクライアントシークレット(Basic)を選択します。
[Save(保存)]を選択します。
資格情報の有効期限の更新
Auth0 Dashboardで、既存の資格情報の有効期限を更新できます。
[Auth0 Dashboard] > [Applications(アプリケーション)] > [Applications(アプリケーション)]に移動し、更新したいアプリケーションを選択します。
[Credentials(資格情報)]タブを選択します。
更新したい資格情報を選択し、[Edit Credential(資格情報の編集)]を選択します。
[Set an explicit expiry date for this Credential(この資格情報への明確な有効期限の設定)]を選択し、未来の日付を設定します。
[Update Credential(資格情報の更新)]を選択します。
private_key_jwt
に対する新しいアプリケーションの構成
Management APIを使用して、認証方法をprivate_key_jwt
に設定し、新しいアプリケーションを作成できます。次のペイロードでクライアントの作成
エンドポイントにPOST
を呼び出します。
curl --location --request POST 'https://{domain}/api/v2/clients' \
--header 'Authorization: Bearer {managementApiAccessToken} \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "{clientName}",
"app_type": "non_interactive",
"client_authentication_methods": {
"private_key_jwt": {
"credentials": [
{
"name": "{credentialName}",
"credential_type": "public_key",
"pem": "{credentialublicKey}",
"alg": "{algorithm}",
"expires_at": "{expiresAt}"
}
]
},
"jwt_configuration": {
"alg": "RS256"
}
}
}'
Was this helpful?
パラメーター | 説明 |
---|---|
algorithm |
アサーションに署名するために使用するアルゴリズム。サポート値はRS256、RS384、PS256です。指定しない場合、アルゴリズムはデフォルトのRS256になります。 |
clientName |
新規クライアントの名前。 |
credentialName |
公開鍵の名前。 |
expires_at |
任意。ISO 8601形式の資格情報の有効期限。例えば、2020-08-20T19:10:06.299Z です。有効期限を過ぎると、資格情報は無効になります。 |
managementApiAccessToken |
create:credentials スコープを持つ Management API のアクセストークン 。 |
pem |
PEM形式でエンコードされた公開鍵、またはx.509。 |
parse_expiry_from_cert |
任意。証明書を与えられたときにAuth0が有効期限の構造解析をするべきブール値を示します。証明書が与えられない場合、Auth0はエラーを返します。また、parse_expiry_from_cert とexpires_at も相互排他的です。その場合、Auth0はエラーを返します。 |
応答には、client_id
プロパティを含み、アプリケーションをリソースサーバーに紐づけます。また、応答には、資格情報のために作成した生成kid
を含みます。これはのちほど、client_assertion
を生成するために使用します。
既存のアプリケーションの構成
また、既存のアプリケーションを構成し、Auth0 Management APIで秘密鍵JWT認証を使用できます。これにはtoken_endpoint_auth_method
フィールドのすべての値を削除し、client_authentication_methods
フィールドに値を作成する必要があります。
資格情報リソースの作成
キーペアを生成したら、資格情報リソースを作成します。Management APIの/clients
エンドポイントに次のPOST要求をします。
curl --location --request POST 'https://{domain}/api/v2/clients/{clientId}/credentials' \
--header 'Authorization: Bearer {managementApiAccessToken} \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "{credentialName}",
"credential_type": "public_key",
"pem": "{credentialPublicKey}",
"alg": "{algorithm}",
"expires_at ": "{expiresAt}",
}'
Was this helpful?
| パラメーター | 説明 | | ---------- | ---------- | |algorithm
| アサーションの署名に使用するアルゴリズム。サポート値はRS256、RS384、PS256です。指定されていない場合、アルゴリズムのデフォルトはRS256です。| |clientId
| 更新されるアプリケーションのID。| |credentialName
| 公開鍵の名前。| |managementApiAccessToken
| create:credentials
スコープを持つ[Management APIのアクセストークン](/secure/tokens/access-tokens/management-api-access-tokens)。| |pem
| PEM形式でエンコードされた公開鍵またはx.509証明書。| |expires_at
| 任意。ISO 8601形式の資格情報の有効期限です。例えば、2020-08-20T19:10:06.299Z
です。有効期限が過ぎると、資格情報は無効になります。| |parse_expiry_from_cert
| 任意。証明書を指定されたときにAuth0が構造解析をする有効期限のブール値を示します。証明書が指定されない場合、Auth0はエラーを返します。また、parse_expiry_from_cert
とexpires_at
は相互排他的です。その場合、Auth0はエラーを返します。|
::: ::: 注意 公開鍵 PEM公開鍵は、Auth0に渡す前にJSON-escapedである必要があります。この例では、渡す必要のあるコンテンツは次の通りです:
----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA53VzmIVVZZWyNm266l82
mnoDc9g/snXklax5kChEhqK/WnTUvuXP4Gd4THj8rchxgUGKXd4PF3SUcKyn/qPm
Tet0idVHk2PwP//FOVgYo5Lb04js0pgZkbyB/WjuMp1w+yMuSn0NYAP7Q9U7DfTb
jmox8OQt4tCB4m7UrJghGqT8jkPyZO/Ka6/XsyjTYPOUL3t3PD7JShVAgo1mAY6g
Sr4SORywIiuHsg+59ad7MXGy78LirhtqAcDECKF7VZpxMuEjMLg3o2yzNUeWI2Mg
IF+t0HbO1E387fvLcuSyai1yWbSr1PXyiB2aXyDpbD4u7d3ux4ahU2opH11lBqvx
+wIDAQAB
-----END PUBLIC KEY-----
Was this helpful?
:::
資格情報IDが応答を返します。次のステップにIDを使用します。
資格情報の関連付け
資格情報を作成したら、それをアプリケーションに関連付けます。private_key_jwt
を使用した認証中に、アプリケーションはこれらの資格情報を使用します。
Management APIのクライアントの更新
エンドポイントにPATCH要求を行います。
curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId} \
--header 'Authorization: Bearer {managementApiAccessToken} \
--header 'Content-Type: application/json' \
--data-raw '{
"token_endpoint_auth_method": null,
"client_authentication_methods": {
"private_key_jwt": {
"credentials": [{ "id": {credentialId} }]
}
}
}'
Was this helpful?
パラメーター | 説明 |
---|---|
clientId |
更新されるアプリケーションのID。 |
managementApiAccessToken |
update:client とupdate:credentials のスコープを持つManagement APIのアクセストークン。 |
credentialId |
新しい資格情報のID。 |
pem |
PEM形式の公開鍵。 |
クライアントシークレット認証の使用のためのアプリケーションの構成
クライアントシークレットを使用するようにアプリケーション構成を復元するには、client_authentication_methods
を無効にし、認証方法でtoken_endpoint_auth_method
を再有効にする必要があります。
例
curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId} \
--header 'Authorization: Bearer {managementApiAccessToken} \
--header 'Content-Type: application/json' \
--data-raw '{
"token_endpoint_auth_method": "{tokenEndpointAuthMethod}",
"client_authentication_methods": null
}'
Was this helpful?
パラメーター | 説明 |
---|---|
clientId |
更新されたアプリケーションのID。 |
managementApiAccessToken |
update:clientsとupdate:client とupdate:credentials のスコープを持つ Management APIのアクセストークン 。 |
tokenEndpointAuthMethod |
最終の認証方法。例:client_secret_basic またはclient_secret_post 。 |
有効期限フィールドに資格情報をパッチする
Management APIの 資格情報の更新エンドポイントで有効期限付きの既存の資格情報を更新できます。
curl --location --request PATCH 'https://{domain}/api/v2/clients/{clientId}/credentials/{credentialId} ' \
--header 'Authorization: Bearer {managementApiAccessToken} \
--header 'Content-Type: application/json' \
--data-raw '{
"expires_at": {expiresAt}
}'
Was this helpful?
| パラメーター | 説明 | | ---------- | ---------- | |managementApiAccessToken
| update:credentials
スコープを持つManagement APIのアクセストークン。| |clientId
| 更新したいクライアント。| |expires_at
|ISO 8601形式の資格情報の有効期限。たとえば、2020-08-20T19:10:06.299Z
です。|
更新できる唯一のフィールドはexpires_at
フィールドです。残りの属性は不変で、変更するには資格情報をローテーションする必要があります。
資格情報の制限
Auth0では、秘密鍵JWT認証の設定において、RSA鍵ペアの最小サイズを2048ビット、最大サイズを4096ビットと定めています。アプリケーションでは、最大2つの資格情報を構成できます。
資格情報のローテーションを行う
鍵の漏洩を防ぐために、Auth0では定期的に鍵ペアをローテーションすることを推奨しています。その方法については、「資格情報のローテーションを行う」をお読みください。