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

# JSON Web Tokenの構造

> JSON Web Signature（JWS）のあるJSON Web Tokenの構造について説明します。

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>にはすべて、[JSON Web Signatures（JWS）](https://tools.ietf.org/html/rfc7515)が付いています。つまり、JWTは暗号化でなく署名されていることを表します。JWSは、JSON形式の構造を使って、デジタル署名やメッセージ認証コード（MAC：Message Authentication Codes）でセキュリティー保護されたコンテンツを表します。

整形式のJWTは、ドット（`.`）で区切られた、3つのBase64urlエンコードされた連結文字列から構成されます。

* **JOSEヘッダー** ：トークンタイプについてのメタデータと、コンテンツの保護に使用される暗号化アルゴリズムが含まれています。
* **JWSペイロード** （[クレーム](https://tools.ietf.org/html/rfc7519#section-4)のセット）：ユーザーのIDやアクセス許可など、検証可能なセキュリティステートメントが含まれています。
* **JWS署名** ：トークンが信頼できるもので、改ざんされていないことを検証するのに使用されます。JWTを使用する際は、署名を保存して使用する前に、\*\* 署名を確認する\*\*[必要があります](/docs/ja-jp/secure/tokens/json-web-tokens/validate-json-web-tokens)。

JWTは一般的に以下のように見えます。

<Frame>
  <img src="https://mintcdn.com/docs-dev-fix-docs-5525/Kb8P46QU77TFjfuu/docs/images/ja-jp/cdy7uua7fh8z/7FI79jeM55zrNGd6QFdxnc/80a18597f06faf96da649f86560cbeab/encoded-jwt3.png?fit=max&auto=format&n=Kb8P46QU77TFjfuu&q=85&s=990520c47418fed927ff425f07ba42e5" alt="JSON Web Token" width="900" height="207" data-path="docs/images/ja-jp/cdy7uua7fh8z/7FI79jeM55zrNGd6QFdxnc/80a18597f06faf96da649f86560cbeab/encoded-jwt3.png" />
</Frame>

JWTの中身を自分で見るには、[JWT.io Debugger](http://jwt.io)を使います。JWTが整形式であることの確認や、各種のクレームの値を手動で検査することができます。

<Frame>
  <img src="https://mintcdn.com/docs-dev-fix-docs-5525/KNeNQVuuteDqnTi5/docs/images/ja-jp/cdy7uua7fh8z/5U3Azt2AReuNzNuQqkRs5/9629ab9924a0212b74bee0b8fa88c295/legacy-app-auth-5.png?fit=max&auto=format&n=KNeNQVuuteDqnTi5&q=85&s=98a10913d55216ea253e9ea66bf7ed6d" alt="JWT Debugger" width="900" height="1013" data-path="docs/images/ja-jp/cdy7uua7fh8z/5U3Azt2AReuNzNuQqkRs5/9629ab9924a0212b74bee0b8fa88c295/legacy-app-auth-5.png" />
</Frame>

## JOSEヘッダー

JSONオブジェクトで、暗号化の操作を記述するパラメーターや使用されているパラメーターが含まれています。JOSE（JSON Object Signing and Encryption）ヘッダーは、一般的に名前/値のペアで構成されるヘッダーパラメーターのセットから成り、名前/値は使われるハッシュアルゴリズム（HMAC SHA256やRSAなど）とJWTの種類になります。

```json lines theme={null}
{
      "alg": "HS256",
      "typ": "JWT"
    }
```

## JWTペイロード

ペイロードにはエンティティ（通常はユーザー）についてのステートメントと、エンティティについての追加の属性が含まれ、追加の属性はクレームを呼ばれます。以下の例で、エンティティはユーザーです。

```json lines theme={null}
{
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
```

JWTクレームを扱う際には、異なるクレームタイプと命名規則に注意してください。

## JWS署名

署名は、JWTの送信者が自称のとおりであることを検証し、メッセージが途中で変更されていないことを保証するために使用されます。

署名を作成するには、Base64エンコードされたヘッダーとペイロードをシークレットと共に取得して、ヘッダーで指定されているアルゴリズムで署名します。

たとえば、HMAC SHA256アルゴリズムを使ってトークンの署名を作成する場合には、以下を行います。

```json lines theme={null}
HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret)
```

## もっと詳しく

* [JSON Web Tokenクレーム](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-token-claims)
* [JSON Web Tokenを検証する](/docs/ja-jp/secure/tokens/json-web-tokens/validate-json-web-tokens)
* [JSON Web Key Set](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-key-sets)
* [JSON Web Key Setのプロパティ](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-key-set-properties)
* [JSON Web Key Setを見つける](/docs/ja-jp/secure/tokens/json-web-tokens/locate-json-web-key-sets)
* [アクセストークンを取得する](/docs/ja-jp/secure/tokens/access-tokens/get-access-tokens)
