メインコンテンツへスキップ

概要

主要な概念
  • アクセス、ID、リフレッシュ、ログアウトの各トークンで Auth0 が使用する JSON Web Token (JWT) について確認します。
  • トークンの署名とは何かを理解するために、署名アルゴリズムを確認します。
  • JWT を検証して、改ざんされていないことを確認します。
  • JWT を検証するには、Auth0 SDK、ミドルウェア、または JWT.io のサードパーティライブラリを使用します。
Auth0 では、安全なデータ転送、認証、および認可のために を使用します。トークンが侵害されておらず、署名が真正であることを確認するために、Web、ネイティブ、シングルページアプリケーションでは、トークンを解析して検証する必要があります。たとえば、トークンが改ざん、不正使用、または期限切れになっている場合のセキュリティリスクを低減するために、トークンを検証する必要があります。 の検証では、構造、クレーム、署名を確認して、リスクを最小限に抑えます。 
JWT を目視で確認するには、JWT.io にアクセスするか、JWT Debugger Chrome Extension) を使用します。
JWT の署名は、 を使用して生成されます。トークンでは複数の を使用できますが、Auth0 は RS256 (SHA-256 ハッシュ関数を使用する RSA 暗号化) または HS256 (SHA-256 を使用する HMAC メッセージ認証コード (MAC) ) をサポートしています。Auth0 が推奨するアルゴリズムの詳細については、署名アルゴリズム を参照してください。 JWT を検証する際は、通常、現在のハッシュ値と元のハッシュ値を解析またはデコードして比較し、トークン署名が真正であることを確認します。バックエンド API クイックスタート では、JWT の検証と解析を行う SDK を使用しています。

解析と検証

JWT の検証と解析を行う SDK を使用していない場合は、次のいずれかの方法で JWT を解析し、検証できます。
  • 使用している Web フレームワーク向けの既存のミドルウェアを使用する。
  • JWT.io でサードパーティライブラリを選択する。
  • specification RFC 7519 > 7.2 Validating a JWT で説明されているチェックを手動で実装する。
JWT の解析と検証には、ミドルウェアまたは既存のオープンソースのサードパーティライブラリを使用することを強く推奨します。JWT.io では、.NET、Python、Java、Ruby、Objective-C、Swift、PHP など、さまざまなプラットフォームや言語向けのライブラリを見つけることができます。

ミドルウェア

ASP.NET Core など、多くの Web フレームワークには、JWT の検証を行う JWT ミドルウェアが含まれています。通常は、ミドルウェアがフレームワーク全体の認証の仕組みと適切に統合されるため、この方法が最適です。

サードパーティライブラリ

サードパーティライブラリを選択する場合は、Auth0 でアプリケーションまたは API を登録する際に選択した署名アルゴリズムをサポートするライブラリを選んでください。また、すべてのライブラリがすべての JWT クレームを検証するわけではない点にも注意してください。JWT.io では、各ライブラリがどの検証をサポートしているかを確認できます (緑色のチェックマークを探してください) 。 ほとんどのサードパーティライブラリでは、JWT を検証するためのメソッドが 1 つ用意されており、さまざまな引数で検証方法をカスタマイズできます。たとえば、Node.js と node-jsonwebtoken ライブラリ を使用している場合は、jwt.verify() メソッドを呼び出します。このメソッドは、許可するアルゴリズムをカスタマイズするための algorithms 引数 (none は許可しないでください) 、シークレットまたは RSA 公開鍵のいずれかを設定する secretOrPublicKey 引数 (選択した署名アルゴリズムによって異なります) 、およびクレーム検証をカスタマイズするためのその他の入力引数をサポートしています。解析に失敗した場合、ライブラリは jwt malformed というメッセージを含む JsonWebTokenError error を返します。その場合は、関連するリクエストを必ず拒否する必要があります。 サードパーティライブラリを使用する際の一般的な推奨事項:
  • JWT からクレームを取得する場合は、verify() メソッドを使用してクレームと署名を検証してください。トークンの検証に decode() メソッドを使用することは避けてください。特に、そのトークンが から送られてきたものである場合は、なおさらです。
  • 選択したライブラリの使用方法に関するすべての指示に注意深く従ってください。ライブラリが既定値や設定に依存している場合、それがセキュリティリスクにつながる可能性があります。

チェックを手動で実装する

JWT の検証を手動で行うことは推奨されません。実装を誤ったり重要な詳細を見落としたりして、重大なセキュリティ脆弱性につながるおそれがあるためです。ほとんどの JWT ライブラリでは、JWT の検証を自動的に処理できます。お使いのプラットフォームと言語に対応する JWT ライブラリについては、JWT.io を参照してください。 JWT を手動で検証する方法については、RFC 7519 を参照してください。Auth0 が発行するすべての JWT は JSON Web Signature (JWS) を使用しており、暗号化ではなく署名されています。

RS256 署名付きトークンを検証する

RS256 署名付きトークンを目視で検証するには、次の手順に従います。
  1. Dashboard > Applications に移動します。
  2. Settings ビューに移動し、Advanced Settings を開きます。
  3. Certificates ビューに移動し、Signed Certificate フィールドを見つけて、Public Key をコピーします。
  4. JWT.io の Web サイトにアクセスし、Algorithm ドロップダウンで RS256 を選択します。
  5. Verify Signature セクションを見つけ、-----BEGIN PUBLIC KEY----- で始まるフィールドの内容を、先ほどコピーした Public Key に置き換えます。
いずれかのアプリケーションから取得したトークンの署名を検証するには、次の方法を使用します。 公開鍵は、次のテナントの JWKS から取得することをお勧めします。 https://{yourDomain}/.well-known/jwks.json

詳しくはこちら