JSON Web Encryption(JWE)の構成
デフォルトでは、Auth0は、署名されたJSON Web Token (JWT)としてフォーマットされたアクセストークンを発行します。つまり、完全性は保護されていますが、それでもなおクライアントおよびその他仲介者が検査できることを意味します。これは、リソースサーバーにのみ公開されることを意図しているデータの情報プライバシーの損失につながる可能性があります。
アクセストークンの無許可の検査を防止するために、Auth0は、ネストされたJWTアクセストークの使用をサポートしています。これは、アクセス情報がJWTにサインインされ、その後暗号化されて、JSON Web Encryption(JWE)で表されます。情報がその他の当事者にとっては不明瞭であるものの、リソースサーバーは、これらアクセストークンの解読とJWTペイロードの署名の検証の両方を行うことが期待されます。
RSA鍵ペアの生成
JWEを使用するためにAPIを構成する前に、RSA鍵ペアを生成する必要があります。
秘密鍵は、秘密に保つ必要があります。RSA鍵ペアの生成で説明されている通りに、Auth0にPEMフォーマットでエンコードされた公開鍵をアップロードします。リソースサーバーまたはAPIサーバーのみが、秘密鍵に安全にアクセスして、アクセストークンを解読できます。
APIに対するJWEの構成
Auth0 Dashboardを使用して、APIに対するJWEを構成します。まず、APIに対して、[Token Settings(トークン設定)]の下にあるJSON Web Encryption(JWE)を有効にします。

要求されたら、JSON Web Encryption(JWE)キーを追加します。
識別しやすいように、わかりやすい名前を入力します。
PEM形式でエンコードされた公開鍵を持つ証明書をアップロードします。
暗号化アルゴリズムを選択します。
(任意)キー識別子を入力します。
[Add(追加)]をクリックし、JWEキーを保存することで、証明書のサムプリントが生成されます。
Auth0 Management APIを使用して、リソースサーバーまたはAPIサーバーに対するJWEを構成します。各APIが暗号化公開鍵を持つように、それぞれに対するJWEを構成する必要があります。
次のPOST要求は、暗号化されたアクセストークンを受け取る新しいAPIを構成します。
curl -X POST --location "https://{domain}/api/v2/resource-servers" \
-H "Authorization: Bearer {managementAccessToken}" \
-H "Content-Type: application/json" \
--data-raw '{
"name": "{apiName}",
"identifier": "{apiIdentifier}",
"token_encryption": {
"format": "compact-nested-jwe",
"encryption_key":
{
"name": "{credentialName}",
"pem": "{pem}",
"alg": "{alg}",
"kid": "{kid}"
}
}
}'
Was this helpful?
次のテーブルでは、異なるパラメーターの意味について説明します。
| パラメーター | 必須? | 説明 | | -- | -- | -- | | apiName
| 必須 | 新しいAPIの名前。| | apiIdentifier
| 必須 | APIの一意のID。これはトークンオーディエンスとして使用されます。 | | credentialName
| 任意 | 公開鍵の名前。| | pem
| 必須 | PEM形式で暗号化された公開鍵。 | | alg
| 必須 | 暗号化アルゴリズムは、RSA-OAEP-256
、RSA-OAEP-384
、RSA-OAEP-512
のいずれかである必要があります。 | | kid
| 任意 | JWEトークンのkid
ヘッダーへの書き込みに使用されるID。これは、キーのローテーション中の暗号化に使用されるキーの識別に使用することができます。
応答には、リソースサーバーを一意に識別するid
プロパティを含みます。また、応答には、資格情報の識別に使用できる、生成されたthumbprint_sha256
フィールドも含みます。Auth0は最初の作成後(この場合、PEM)に、キーマテリアルを返しません。
thumbprint_sha256
を生成する方法はいくつもあります。詳細については、「RFC 8705 OAuth 2.0相互TLSクライアント認証と証明書バウンドアクセストークン」を参照してください。
正しいthumbprint_sha256
を生成できるように、次のNode.jsのコードサンプルを使用してサムプリントを抽出できます。
const fs = require('fs');
const crypto = require('crypto');
const { calculateJwkThumbprint, exportJWK } = require('jose');
const publicKeyObject = crypto.createPublicKey(fs.readFileSync('./my_cert.pem'));
exportJWK(publicKeyObject).then((jwk) => {
calculateJwkThumbprint(jwk, 'sha256').then((thumbprint) => {
console.log(thumbprint);
});
});
Was this helpful?