Skip to main content

概要

主要な概念
  • Auth0 がアクセストークン、ID トークン、リフレッシュトークン、ログアウトトークンに使用する 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 が推奨するアルゴリズムについて詳しくは、Signing Algorithms を参照してください。 JWT を検証する際は、一般に現在のハッシュ値と元のハッシュ値を解析またはデコードして比較し、トークンの署名が正当なものかどうかを確認します。backend API quickstarts ではいずれも、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 などの多くのウェブフレームワークには、JWT の検証を行う JWT ミドルウェアが用意されています。通常は、ミドルウェアがフレームワーク全体の認証の仕組みとうまく連携するため、これが最も適した方法です。

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

サードパーティライブラリを選ぶ場合は、アプリケーションまたは API を Auth0 に登録した際に選択した署名アルゴリズムに対応しているライブラリを選んでください。また、すべてのライブラリがすべての JWT クレームを検証するわけではない点にも注意が必要です。JWT.io では、各ライブラリがどの検証に対応しているかを確認できます (緑のチェックマークを参照してください) 。 ほとんどのサードパーティライブラリでは、JWT を検証するためのメソッドが 1 つ用意されており、さまざまな引数を使って検証内容をカスタマイズできます。たとえば、Node.js で node-jsonwebtoken library を使用している場合は、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 > アプリケーション に移動します。
  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

詳細はこちら