> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-docs-event-stream-action-templates.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# JSON Web Encryption（JWE）の構成

> APIに対してJSON Web Encryption（JWE）を構成する方法について学びます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ハイリーレギュレーテッドアイデンティティ機能を使用するには、エンタープライズプランとハイリーレギュレーテッドアイデンティティアドオンが必要です。詳細については、「[Auth0の価格設定](https://auth0.com/pricing/)」を参照してください。
</Callout>

デフォルトでは、Auth0は、署名された[JSON Web Token (JWT)](/docs/ja-jp/secure/tokens/json-web-tokens)としてフォーマットされたアクセストークンを発行します。つまり、完全性は保護されていますが、それでもなおクライアントおよびその他仲介者が検査できることを意味します。これは、リソースサーバーにのみ公開されることを意図しているデータの情報プライバシーの損失につながる可能性があります。

アクセストークンの無許可の検査を防止するために、Auth0は、ネストされた<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-3" href="/docs/ja-jp/glossary?term=json-web-token" tip="JSON Web Token（JWT）: 二者間のクレームを安全に表現するために使用される標準IDトークン形式（および多くの場合、アクセストークン形式）。" cta="用語集の表示">JWT</Tooltip>アクセストークの使用をサポートしています。これは、アクセス情報がJWTにサインインされ、その後暗号化されて、JSON Web Encryption（JWE）で表されます。情報がその他の当事者にとっては不明瞭であるものの、リソースサーバーは、これらアクセストークンの解読とJWTペイロードの署名の検証の両方を行うことが期待されます。

## RSA鍵ペアの生成

JWEを使用するためにAPIを構成する前に、[RSA鍵ペアを生成する](/docs/ja-jp/secure/application-credentials/generate-rsa-key-pair)必要があります。

秘密鍵は、秘密に保つ必要があります。[RSA鍵ペアの生成](/docs/ja-jp/secure/application-credentials/generate-rsa-key-pair)で説明されている通りに、Auth0にPEMフォーマットでエンコードされた公開鍵をアップロードします。リソースサーバーまたはAPIサーバーのみが、秘密鍵に安全にアクセスして、アクセストークンを解読できます。

## APIに対するJWEの構成

<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/docs-dev-docs-event-stream-action-templates/V-g8sIA_dMysRiDH/docs/images/ja-jp/cdy7uua7fh8z/5xHKQ3rKN7DZogzD5qFDLp/659332982d4f8c26cd1e1a55c0dce1d2/API_-_Token_Settings.png?fit=max&auto=format&n=V-g8sIA_dMysRiDH&q=85&s=2e93a23b37fb3396b16c2ae75fabca12" alt="" width="1215" height="918" data-path="docs/images/ja-jp/cdy7uua7fh8z/5xHKQ3rKN7DZogzD5qFDLp/659332982d4f8c26cd1e1a55c0dce1d2/API_-_Token_Settings.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を構成します。各APIが暗号化公開鍵を持つように、それぞれに対するJWEを構成する必要があります。

    次のPOST要求は、暗号化されたアクセストークンを受け取る新しいAPIを構成します。

    ```json 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の一意の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クライアント認証と証明書バウンドアクセストークン](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>

## もっと詳しく

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