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

# JSON Web Tokenを検証する

> JSON Web Token（JWT）を解析および検証する方法を説明します。

<Card title="Overview">
  重要なコンセプト

  * Auth0がアクセス、ID、リフレッシュとログアウトのトークンに使うJSON Web Token（JWT）の詳細を理解する
  * 署名アルゴリズムを確認し、トークンにとっての署名を理解する
  * JWTを検証し、改ざんされていないことを確認する
  * [JWT.io](https://jwt.io/?_gl=1*arqbp6*rollup_ga*MTI5MzkwNDYxOC4xNjQ0MjUyMTYx*rollup_ga_F1G3E656YZ*MTY1MDA0NDA3Ni4xMjkuMS4xNjUwMDQ0MDg1LjUx&_ga=2.167965921.1971874740.1649687281-1293904618.1644252161#libraries-io)でAuth0 SDK、ミドルウェア、または第三者のライブラリーの1つを使ってJWTを検証する
</Card>

Auth0では、 <Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-JP/ja-jp/glossary?term=json-web-token" tip="JSON Web Token（JWT）: 二者間のクレームを安全に表現するために使用される標準IDトークン形式（および多くの場合、アクセストークン形式）。" cta="用語集の表示">JSON Web Token（JWT）</Tooltip> を使用して安全なデータ送信、認証、および認可を行います。トークンは漏洩されず、署名が本人のものであるように、通常のWeb、ネイティブ、およびシングルページのアプリケーションで解析および検証される必要があります。トークンが改ざん、不正使用されたり、期限が切れたりした場合などにセキュリティリスクを減らすために、トークンを検証する必要があります。<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-3" href="/docs/ja-JP/ja-jp/glossary?term=json-web-token" tip="JSON Web Token（JWT）: 二者間のクレームを安全に表現するために使用される標準IDトークン形式（および多くの場合、アクセストークン形式）。" cta="用語集の表示">JWT</Tooltip>検証では、リスクを最小限に抑えるために、構造、クレーム、および署名を確認します。

﻿

<Note>
  JWTを読める文字列で検証するには、[JWT.io](https://jwt.io/)または[JWT Debugger Chrome Extension（JWTデバッガーのChrome拡張機能）](https://chrome.google.com/webstore/detail/jwt-debugger/ppmmlchacdbknfphdeafcbmklcghghmd?hl=en)を使用します。
</Note>

JWTトークンの署名は、 <Tooltip data-tooltip-id="react-containers-DefinitionTooltip-2" href="/docs/ja-JP/ja-jp/glossary?term=signing-algorithm" tip="署名アルゴリズム: トークンが改ざんされないように、トークンにデジタル署名するためのアルゴリズム。" cta="用語集の表示">署名アルゴリズム</Tooltip>を使用して生成されます。トークンでは複数の署名アルゴリズムを使用できますが、Auth0では、RS256、SHA-256ハッシュ関数を含むRSA暗号化、またはHS256、SHA-256を含むHMACメッセージ認証コード（MAC）をサポートします。Auth0の推奨アルゴリズムの詳細については、「[署名アルゴリズム](/docs/ja-JP/ja-jp/get-started/applications/signing-algorithms)」をお読みください。

JWTを検証する場合は通常、現在のハッシュ値と元のハッシュ値が解析またはデコードされてから、トークンの署名が本物かどうかを検証するために比較されます。全ての[バックエンドAPIのクイックスタート](/docs/ja-JP/quickstart/backend)は、JWT検証と解析を実行するSDKを使用します。

<div id="parse-and-validate">
  ## 解析と検証
</div>

JWT検証と解析を実行するいずれかのSDKを使用していない場合は、以下の方法でJWTを解析および検証することができます。

* Webフレームワークに既存のミドルウェアを使用する
* JWT.ioからサードパーティのライブラリーを選択する
* [specification RFC 7519 > 7.2 Validating a JWT](https://tools.ietf.org/html/rfc7519#section-7.2)で説明されているように、チェックを手動で実装する

ミドルウェアか、既存のサードパーティのオープンソースライブラリーを使用して、JWTを解析し検証することをお勧めします。[JWT.io](https://jwt.io/#libraries-io)では、.NETやPython、Java、Ruby、Objective-C、Swift、PHPといった、さまざまなプラットフォームと言語のライブラリーが揃っています。

<div id="middleware">
  ## ミドルウェア
</div>

[ASP.NET Core](/docs/ja-JP/quickstart/backend/aspnet-core-webapi)など多くのWebフレームワークには、JWT検証を処理するJWTミドルウェアが揃っています。ミドルウェアはフレームワークの全体的な認証メカニズムとうまく統合するため、通常、この方法が最も確実な方法です。

<div id="third-party-libraries">
  ## サードパーティのライブラリー
</div>

サードパーティのライブラリーを選択する場合は、アプリケーションまたはAuth0を含むAPIを登録したときに選択した署名アルゴリズムをサポートするライブラリーを選択します。すべてのライブラリーがJWTクレームを検証するわけではない点にもご注意ください。JWT.ioでは、各ライブラリーがサポートする検証を確認することができます（緑のチェックマークを探します）。

ほとんどのサードパーティのライブラリーは、1つのメソッドを実装してJWTを実装し、検証をカスタマイズできるようにさまざまな引数を組み込みます。たとえば、Node.jsおよび[node-jsonwebtokenライブラリー](https://github.com/auth0/node-jsonwebtoken)を使用している場合は、[jwt.verify()](https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback)メソッドを呼び出します。このメソッドは、許可されたアルゴリズムをカスタマイズできる`algorithms`引数（`none`を必ず拒否すること）、シークレットまたはRSA公開鍵（選択した署名アルゴリズムに応じる）で入力する`secretOrPublicKey`引数、およびクレームの検証をカスタマイズできるその他の入力引数をサポートします。解析に失敗すると、ライブラリーでは[JsonWebTokenErrorエラー](https://github.com/auth0/node-jsonwebtoken#jsonwebtokenerror)が`jwt malformed`メッセージとともに返され、その後、関連する要求を拒否**しなければなりません**。

サードパーティのライブラリーを使用する上での一般的な推奨事項

* JWTからクレームを取得するには、`verify()`メソッドを使用してクレームと署名を検証します。トークンがパブリッククライアントから発行されている場合は特に、`decode()`メソッドを使用するのを避けます。
* 選択したライブラリーを使用する方法についての全手順に慎重に従います。ライブラリーはデフォルト値またはセキュリティリスクを生じさせる恐れがある設定を使用する可能性があります。

<div id="manually-implement-checks">
  ## チェックを手動で実装する
</div>

手動でJWTの検証を行う場合、実装が正しく行われなかったり、一部の重要な詳細が抜けたりして、重大なセキュリティ脆弱性につながりかねません。このため、JWTの手動検証は控えてください。ほとんどのJWTライブラリーは、JWT検証をユーザーに代わって処理します。お使いのプラットフォームとプログラミング言語用のJWTライブラリーを検索するには、JWT.ioにアクセスしてください。

JWTを手動で検証する方法については、「[RFC 7519](https://tools.ietf.org/html/rfc7519#section-7.2)」を参照してください。Auth0が発行したJWTにはすべて、JSON Web Signature（JWS）が付いています。つまり、暗号化でなく署名されていることを表します。

<div id="verify-rs256-signed-tokens">
  ## RS256で署名されたトークンを検証する
</div>

RS256で署名されたトークンを検証するには、以下のようにします。

1. [［Dashboard］>［Applications（アプリケーション）］](https://manage.auth0.com/#/applications)に移動します。
2. \*\*［Settings（設定）］**ビューで、**［Advanced Settings（高度な設定）］\*\*を開きます。
3. \*\*［Certificates（証明書）］**ビューに移動し、**［Signed Certificate（署名付き証明書）］**フィールドを見つけて、**［Public Key（公開鍵）］\*\*をコピーします。
4. [JWT.io](https://jwt.io/)のWebサイトに移動し、\*\*［Algorithm（アルゴリズム）］**ドロップダウンから**［RS256］\*\*を選択します。
5. \*\*［Verify Signature（署名の検証）］\*\*セクションを見つけて、前にコピーした公開鍵を`-----BEGIN PUBLIC KEY-----`から始まるフィールドのコンテンツの代わりに貼り付けます。

いずれかのアプリケーションからトークンの署名を検証するには、以下のようにします。

公開鍵はこちらのテナントのJWKSから取得することを推奨します：
`https://{yourDomain}/.well-known/jwks.json`

<div id="learn-more">
  ## もっと詳しく
</div>

* [JSON Web Tokenクレーム](/docs/ja-JP/ja-jp/secure/tokens/json-web-tokens/json-web-token-claims)
* [IDトークンの検証](/docs/ja-JP/ja-jp/secure/tokens/id-tokens/validate-id-tokens)
* [アクセストークンを検証する](/docs/ja-JP/ja-jp/secure/tokens/access-tokens/validate-access-tokens)
* [トークンのベストプラクティス](/docs/ja-JP/ja-jp/secure/tokens/token-best-practices)
