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

# JSON Webトークン

> JSON Webトークン（JWT）とその使用方法について説明します。

「jot（ジョット）」と発音されるJSON Webトークン（<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>）は、オープン標準（[RFC 7519](https://tools.ietf.org/html/rfc7519)）であり、JSONオブジェクトとして当事者間で情報を安全に送信するためのコンパクトで自己完結型の方法を定義しています。繰り返しになりますが、JWTは標準であり、すべてのJWTはトークンですが、すべてのトークンがJWTというわけではありません。

JWTはサイズが比較的小さいため、URLやPOSTパラメーターを介して、またはHTTPヘッダー内から送信でき、すばやく伝送されます。データベースに複数回の問い合わせを行うことを避けるために、JWTにはエンティティに関するすべての必要な情報が含まれています。JWTの受信者も、トークンの検証のためにサーバーを呼び出す必要はありません。

## JWTのメリット

単純なWebトークン（SWT）や<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-1" href="/docs/ja-jp/glossary?term=security-assertion-markup-language" tip="Security Assertion Markup Language（SAML）: パスワードなしに二者間で認証情報を交換できる標準化プロトコル。" cta="用語集の表示">SAML</Tooltip>トークンと比較すると、JWTには次のような使用上のメリットがあります。

* **コンパクト** ：JSONはXMLよりも冗長性が低いため、エンコードされた場合、JWTはSAMLトークンよりもサイズが小さくなります。このため、HTMLやHTTP環境で渡すにはJWTが適しています。

<Frame>
  <img src="https://mintcdn.com/docs-dev-actions-triggers-prototype/lj4yKtFBkRd_2GRB/docs/images/ja-jp/cdy7uua7fh8z/4S6xl4Yvi0H1CUrLB69ZtH/e3e3bf1767d2d29563a99cf71cab158d/comparing-jwt-vs-saml2.png?fit=max&auto=format&n=lj4yKtFBkRd_2GRB&q=85&s=5f64fc0921a22b4fdf301cd2e65d6718" alt="Encoded JWT Compared to SAML Token" width="900" height="1380" data-path="docs/images/ja-jp/cdy7uua7fh8z/4S6xl4Yvi0H1CUrLB69ZtH/e3e3bf1767d2d29563a99cf71cab158d/comparing-jwt-vs-saml2.png" />
</Frame>

* **安全** ：署名を行う際、JWTはX.509証明書の形式の公開鍵/秘密鍵ペアを使用できます。またJWTは、HMACアルゴリズムを使用して共有秘密鍵で対称的に署名することもできます。さらに、SAMLトークンもJWTのような公開鍵/秘密鍵ペアを使用できますが、不明瞭なセキュリティホールを生じさせずにXMLデジタル署名を使用してXMLに署名することは、JSONに署名する場合のシンプルさと比較すると非常に困難です。JWTの[署名アルゴリズム](/docs/ja-jp/tokens/concepts/signing-algorithms)について、詳しくお読みください。
* **一般的** ：JSONのパーサーはオブジェクトに直接マッピングできるため、ほとんどのプログラミング言語で一般的です。逆に、XMLにはドキュメントからオブジェクトへの自然なマッピングがありません。このため、SAMLアサーションよりもJWTの方が、扱いが簡単です。
* **処理しやすい** ：JWTはインターネット規模で使用されます。つまり、ユーザーのデバイス、特にモバイルでの処理が容易になります。

## JWTを使用する

JWTはさまざまな方法で使用できます。

* **認証** ：ユーザーが資格情報を使ってログインに成功すると、[IDトークン](/docs/ja-jp/secure/tokens/id-tokens)が返されます。[OpenID Connect（OIDC）の仕様](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)によると、IDトークンは常にJWTです。
* **認可** ：ユーザーがログインに成功すると、アプリケーションはそのユーザーに代わってルート、サービス、リソース（APIなど）へのアクセスを要求することがあります。そのためには、すべての要求でアクセストークンを渡す必要がありますが、これはJWTの形式である場合もあります。シングルサインオン（<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=single-sign-on" tip="シングルサインオン（SSO）: ユーザーが1つのアプリケーションにログインした後、そのユーザーを他のアプリケーションに自動的にログインさせるサービス。" cta="用語集の表示">SSO</Tooltip>）では、形式のオーバーヘッドが小さく、異なるドメイン間で簡単に使用できるという理由から、JWTが広く使用されています。
* **情報交換** ：JWTは署名が可能で、送信者が本人であることを確信できるため、当事者間で情報を安全に送信するのに適した方法です。さらに、JWTの構造自体からも、コンテンツが改ざんされていないことを確認できます。

## JWTの安全性

JSONオブジェクトに含まれる情報は、デジタル署名されているため検証可能であり、信頼できます。JWTは、当事者間で機密性を確保するために暗号化することもできますが、Auth0が発行するJWTはJSON Web Signature（JWS）であり、暗号化ではなく署名が行われます。そのため、私たちは署名付きトークンに焦点を当てます。署名付きトークンは、その中に含まれるクレームの整合性を検証できますが、暗号化されたトークンはそうしたクレームを他の当事者から隠します。

一般的に、JWTは秘密鍵（HMACアルゴリズムを使用）、あるいはRSAまたはECDSAを使用した公開鍵/秘密鍵ペアで署名できます（ただし、Auth0はHMACとRSAのみをサポートしています）。トークンが公開鍵/秘密鍵のペアを使用して署名されている場合、その署名は、秘密鍵を保有する当事者だけが署名した人物であることも証明します。

受け取ったJWTを使用する前に、[その署名を使用して適切に検証する](/docs/ja-jp/secure/tokens/json-web-tokens/validate-json-web-tokens)必要があります。トークンの検証が正常に完了しても、そのトークンに含まれる情報が他の人物によって変更されていないことを意味するだけであることに注意してください。プレーンテキストで保存されているコンテンツを他の人物が見られなかったという意味ではありません。このため、JWTには絶対に機密情報を保存してはならず、JWTをHTTPSのみで送信する、[ベストプラクティス](/docs/ja-jp/secure/tokens/token-best-practices)に従う、安全で最新のライブラリのみを使用するなど、JWTが傍受されないようにその他の対策を講じる必要があります。

## もっと詳しく

* [JSON Web Tokenの構造](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-token-structure)
* [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)
* [署名鍵](/docs/ja-jp/get-started/tenant-settings/signing-keys)
* [JSON Web Key Set](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-key-sets)
* [アクセストークンを取得する](/docs/ja-jp/secure/tokens/access-tokens/get-access-tokens)
