private_key_jwt 用の新しいアプリケーションを設定するManagement API を使用して、private_key_jwt を認証方法とする新しいアプリケーションを作成できます。以下のペイロードを指定して、Create a Client エンドポイントに 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" : "{credentialPublicKey}",
"alg" : "{algorithm}",
"expires_at" : "{expiresAt}"
}
]
},
"jwt_configuration" : {
"alg" : "RS256"
}
}
}'
パラメーター 説明 algorithmアサーションの署名に使用するアルゴリズム。サポートされる値は RS256、RS384、PS256 です。指定しない場合、既定で RS256 が使用されます。 clientName新しいクライアントの名前。 credentialName公開鍵の名前。 expires_at任意。認証情報の有効期限を ISO 8601 形式で指定します。たとえば、2020-08-20T19:10:06.299Z です。有効期限を過ぎると、その認証情報は無効になります。 managementApiAccessTokenスコープ create:credentials を持つ Management API のアクセストークン 。 pemPEM 形式でエンコードされた公開鍵、または X.509 証明書。 parse_expiry_from_cert任意。証明書が指定されている場合に、Auth0 がその有効期限を解析することを示すブール値です。証明書が指定されていない場合、Auth0 はエラーを返します。parse_expiry_from_cert と expires_at も相互に排他的であり、この場合も Auth0 はエラーを返します。
PEM 形式の公開鍵は、Auth0 に渡す前に JSON エスケープしておく必要があります。この例では、渡す必要がある内容は次のとおりです。 -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA53VzmIVVZZWyNm266l82 mnoDc9g/snXklax5kChEhqK/WnTUvuXP4Gd4THj8rchxgUGKXd4PF3SUcKyn/qPm Tet0idVHk2PwP//FOVgYo5Lb04js0pgZkbyB/WjuMp1w+yMuSn0NYAP7Q9U7DfTb jmox8OQt4tCB4m7UrJghGqT8jkPyZO/Ka6/XsyjTYPOUL3t3PD7JShVAgo1mAY6g Sr4SORywIiuHsg+59ad7MXGy78LirhtqAcDECKF7VZpxMuEjMLg3o2yzNUeWI2Mg IF+t0HbO1E387fvLcuSyai1yWbSr1PXyiB2aXyDpbD4u7d3ux4ahU2opH11lBqvx +wIDAQAB -----END PUBLIC KEY-----
レスポンスには、アプリケーションをリソースサーバーに紐付ける client_id プロパティが含まれています。また、作成した認証情報に対して生成された kid も含まれており、後で client_assertion を生成する際に使用します。
Auth0 は、認証情報の kid の生成に JSON Web Key Thumbprint 標準を採用しています。 kid は、公開鍵の JWK 表現の SHA256 ダイジェストを base64URL エンコードした値で構成されます。既存のアプリケーションを設定する Auth0 Management APIを使用して、既存のアプリケーションにPrivate Key JWT認証を設定することもできます。token_endpoint_auth_methodフィールドの値を削除し、client_authentication_methodsフィールドに値を追加する必要があります。 既存の本番環境のアプリケーションを更新して private_key_jwt による認証を使用する場合は、後で参照できるよう、現在の client_secret の値を安全に保管しておくことをお勧めします。 private_key_jwt を設定すると、アプリケーションの設定を復元してクライアントシークレットを使用するようにしない限り、client_secret の値にアクセスできなくなります。
認証情報リソースを作成する キーペアを生成したら、認証情報リソースを作成します。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}",
}'
パラメーター 説明 algorithmアサーションの署名に使用するアルゴリズム。使用できる値は RS256、RS384、PS256 です。指定しない場合、デフォルトのアルゴリズムは RS256 です。 clientId更新対象のアプリケーションの ID。 credentialName公開鍵の名前。 managementApiAccessTokenManagement API のアクセストークン (create:credentials スコープを持つもの) 。pemPEM 形式でエンコードされた公開鍵、または 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 エスケープする必要があります。この例で渡す必要がある内容は次のとおりです。 -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA53VzmIVVZZWyNm266l82
mnoDc9g/snXklax5kChEhqK/WnTUvuXP4Gd4THj8rchxgUGKXd4PF3SUcKyn/qPm
Tet0idVHk2PwP//FOVgYo5Lb04js0pgZkbyB/WjuMp1w+yMuSn0NYAP7Q9U7DfTb
jmox8OQt4tCB4m7UrJghGqT8jkPyZO/Ka6/XsyjTYPOUL3t3PD7JShVAgo1mAY6g
Sr4SORywIiuHsg+59ad7MXGy78LirhtqAcDECKF7VZpxMuEjMLg3o2yzNUeWI2Mg
IF+t0HbO1E387fvLcuSyai1yWbSr1PXyiB2aXyDpbD4u7d3ux4ahU2opH11lBqvx
+wIDAQAB
-----END PUBLIC KEY-----
クレデンシャル ID がレスポンスに返されます。次のステップでこの ID を使用してください。 認証情報を関連付ける 認証情報を作成したら、アプリケーションに関連付けます。アプリケーションはprivate_key_jwtによる認証時にこれらの認証情報を使用します。 Management API の Update a Client エンドポイントに 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} }]
}
}
}'
パラメーター 説明 clientId更新対象のアプリケーションのID。 managementApiAccessTokenManagement API 用のアクセストークン (スコープ update:client および update:credentials が必要) 。credentialId作成した認証情報のID。 pemPEM形式の公開鍵。
Auth0 では、アプリケーションの JWT 署名アルゴリズムとして HS256 はサポートされていません。jwt_configuration.alg フィールドは RS256 アルゴリズムに設定する必要があります。署名アルゴリズムの変更方法については、アプリケーションの署名アルゴリズムを変更する を参照してください。 クライアントシークレット認証を使用するようにアプリケーションを設定する アプリケーションの設定をクライアントシークレット使用に戻すには、client_authentication_methods を無効にし、認証方法を指定して token_endpoint_auth_method を再度有効にする必要があります。 認証方法を client_secret に設定すると、アプリケーションを client_secret で認証するよう更新するまで、private_key_jwt を使用して認証できなくなります。
例 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
}'
パラメーター 説明 clientId更新されたアプリケーションのID。 managementApiAccessTokenManagement API 用のアクセストークン (update:client および update:credentials スコープが必要) 。tokenEndpointAuthMethod最終的に使用する認証方法。たとえば: client_secret_basic または client_secret_post。
有効期限フィールドを指定して認証情報をパッチする Management API の Update a credential エンドポイントを使用して、既存の認証情報に有効期限を追加して更新できます。 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}
} '
パラメーター 説明 managementApiAccessTokenManagement API 用の、 update:credentials スコープを持つアクセストークン。 clientId更新する対象のクライアント。 expires_at認証情報の有効期限を ISO 8601 形式で指定します。たとえば、2020-08-20T19:10:06.299Z です。
更新できるフィールドは expires_at フィールドのみです。その他の属性は変更不可のため、変更するには認証情報をローテーションする必要があります。