> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> API の JSON Web Encryption (JWE) を設定する方法を説明します。

# JSON Web Encryption (JWE) を設定する

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Highly Regulated Identity 機能を使用するには、Highly Regulated Identity Add-on を含む Enterprise Plan が必要です。詳しくは、[Auth0 Pricing](https://auth0.com/pricing/) を参照してください。
</Callout>

デフォルトでは、Auth0 は署名付きの [JSON Web Token (JWT)](/ja/docs/secure/tokens/json-web-tokens) 形式の <Tooltip tip="アクセストークン: API へのアクセスに使用される認可資格情報で、不透明な文字列または JWT の形式を取ります。" cta="用語集を表示" href="/ja/docs/glossary?term=access+tokens">アクセストークン</Tooltip> を発行します。これは完全性は保護される一方で、クライアントやその他の中間者が内容を確認できることを意味します。そのため、<Tooltip tip="リソースサーバー: 保護されたリソースをホストするサーバー。リソースサーバーは、保護されたリソース要求を受け付けて応答します。" cta="用語集を表示" href="/ja/docs/glossary?term=resource+server">リソースサーバー</Tooltip> のみに公開されることを想定したデータの秘匿性が損なわれる可能性があります。

アクセストークンの不正な閲覧を防ぐため、Auth0 はネストされた <Tooltip tip="JSON Web Token (JWT): 2 者間でクレームを安全に表現するために使用される標準的な ID Token 形式（および多くの場合 Access Token 形式）です。" cta="用語集を表示" href="/ja/docs/glossary?term=JWT">JWT</Tooltip> アクセストークンをサポートしています。これは、アクセス情報を JWT で署名した後に暗号化し、JSON Web Encryption (JWE) として表現するものです。リソースサーバーは、これらのアクセストークンを復号し、JWT ペイロードの署名も検証することが想定されています。一方で、その情報は他の当事者に対しては不透明です。

<div id="generate-rsa-key-pair">
  ## RSAキーペアを生成する
</div>

API で JWE を使用するよう設定する前に、[RSAキーペアを生成する](/ja/docs/secure/application-credentials/generate-rsa-key-pair)必要があります。

秘密鍵は厳重に管理する必要があります。[RSAキーペアを生成する](/ja/docs/secure/application-credentials/generate-rsa-key-pair)で説明されているとおり、PEM 形式でエンコードされた公開鍵を Auth0 にアップロードしてください。アクセストークンを復号するために秘密鍵へ安全にアクセスできるのは、リソースサーバーまたは API サーバーのみです。

<div id="configure-jwe-for-an-api">
  ## API の JWE を設定する
</div>

<Tabs>
  <Tab title="Auth0 Dashboard">
    [Auth0 Dashboard](https://manage.auth0.com/) を使用して、API の JWE を設定します。まず、API の **Token Settings** で **JSON Web Encryption (JWE)** トグルを有効にします。

    <Frame>
      <img src="https://mintcdn.com/translations/6GE5Z24GDCZehiJ9/docs/images/cdy7uua7fh8z/5xHKQ3rKN7DZogzD5qFDLp/8747f7f3d36c578e0f4622929cefb8e9/Access_Tokens_Settings_-_English.png?fit=max&auto=format&n=6GE5Z24GDCZehiJ9&q=85&s=f54a4c12267ef55cbb1076f046bd3fcc" alt="" width="1202" height="881" data-path="docs/images/cdy7uua7fh8z/5xHKQ3rKN7DZogzD5qFDLp/8747f7f3d36c578e0f4622929cefb8e9/Access_Tokens_Settings_-_English.png" />
    </Frame>

    メッセージが表示されたら、JSON Web Encryption (JWE) キーを追加します。

    * 識別しやすいように、わかりやすい名前を入力します。
    * 公開鍵を PEM 形式でエンコードした証明書をアップロードします。
    * 暗号化アルゴリズムを選択します。
    * (任意) キー識別子を入力します。

    **Add** をクリックして JWE キーを保存すると、証明書のサムプリントが生成されます。
  </Tab>

  <Tab title="Management API">
    [Auth0 Management API](https://auth0.com/docs/api/management/v2) を使用して、リソースサーバーまたは API サーバーの JWE を設定します。JWE は API ごとに設定する必要があるため、各 API はそれぞれ独自の公開暗号化キーを持ちます。

    次の POST リクエストは、暗号化されたアクセストークンを受け取る新しい API を設定します。

    ```bash lines theme={null}
    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}"
        }
      }
    }'
    ```

    次の表は、各パラメーターの意味を説明しています。

    | パラメーター           | 必須 | 説明                                                                          |
    | ---------------- | -- | --------------------------------------------------------------------------- |
    | `apiName`        | 必須 | 新しい API の名前。                                                                |
    | `apiIdentifier`  | 必須 | API の一意の識別子。これはトークンの audience として使用されます。                                    |
    | `credentialName` | 任意 | 公開鍵の名前。                                                                     |
    | `pem`            | 必須 | PEM 形式でエンコードされた公開鍵。                                                         |
    | `alg`            | 必須 | 暗号化アルゴリズムには、`RSA-OAEP-256`、`RSA-OAEP-384`、`RSA-OAEP-512` のいずれかを指定する必要があります。 |
    | `kid`            | 任意 | JWE トークンの `kid` ヘッダーに書き込む識別子。キーローテーション時に、暗号化に使用されたキーを識別するために使用できます。         |

    レスポンスには、リソースサーバーを一意に識別する `id` プロパティが含まれます。また、認証情報の識別に使用できる、生成済みの `thumbprint_sha256` フィールドも含まれます。Auth0 は初回作成後、鍵マテリアル (この場合は PEM) を返しません。

    `thumbprint_sha256` を生成する方法はいくつかあります。詳細については、[RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens](https://datatracker.ietf.org/doc/html/rfc8705#name-jwt-certificate-thumbprint-) を参照してください。

    正しい `thumbprint_sha256` が生成されたことを確認するには、次の Node.js コードサンプルを使用してサムプリントを抽出できます。

    ```javascript lines theme={null}
    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);
      });
    });
    ```
  </Tab>
</Tabs>

<div id="learn-more">
  ## 詳細
</div>

* [JSON Web Encryption](/ja/docs/secure/tokens/access-tokens/json-web-encryption)
