Overview
重要なコンセプト
- Auth0がアクセス、ID、リフレッシュとログアウトのトークンに使うJSON Web Token(JWT)の詳細を理解する
- 署名アルゴリズムを確認し、トークンにとっての署名を理解する
- JWTを検証し、改ざんされていないことを確認する
- JWT.ioでAuth0 SDK、ミドルウェア、または第三者のライブラリーの1つを使ってJWTを検証する
JWTを読める文字列で検証するには、JWT.ioまたはJWT Debugger Chrome Extension(JWTデバッガーのChrome拡張機能)を使用します。
解析と検証
JWT検証と解析を実行するいずれかのSDKを使用していない場合は、以下の方法でJWTを解析および検証することができます。- Webフレームワークに既存のミドルウェアを使用する
- JWT.ioからサードパーティのライブラリーを選択する
- specification RFC 7519 > 7.2 Validating a JWTで説明されているように、チェックを手動で実装する
ミドルウェア
ASP.NET Coreなど多くのWebフレームワークには、JWT検証を処理するJWTミドルウェアが揃っています。ミドルウェアはフレームワークの全体的な認証メカニズムとうまく統合するため、通常、この方法が最も確実な方法です。サードパーティのライブラリー
サードパーティのライブラリーを選択する場合は、アプリケーションまたはAuth0を含むAPIを登録したときに選択した署名アルゴリズムをサポートするライブラリーを選択します。すべてのライブラリーがJWTクレームを検証するわけではない点にもご注意ください。JWT.ioでは、各ライブラリーがサポートする検証を確認することができます(緑のチェックマークを探します)。 ほとんどのサードパーティのライブラリーは、1つのメソッドを実装してJWTを実装し、検証をカスタマイズできるようにさまざまな引数を組み込みます。たとえば、Node.jsおよびnode-jsonwebtokenライブラリーを使用している場合は、jwt.verify()メソッドを呼び出します。このメソッドは、許可されたアルゴリズムをカスタマイズできるalgorithms
引数(none
を必ず拒否すること)、シークレットまたはRSA公開鍵(選択した署名アルゴリズムに応じる)で入力するsecretOrPublicKey
引数、およびクレームの検証をカスタマイズできるその他の入力引数をサポートします。解析に失敗すると、ライブラリーではJsonWebTokenErrorエラーがjwt malformed
メッセージとともに返され、その後、関連する要求を拒否しなければなりません。
サードパーティのライブラリーを使用する上での一般的な推奨事項
- JWTからクレームを取得するには、
verify()
メソッドを使用してクレームと署名を検証します。トークンがパブリッククライアントから発行されている場合は特に、decode()
メソッドを使用するのを避けます。 - 選択したライブラリーを使用する方法についての全手順に慎重に従います。ライブラリーはデフォルト値またはセキュリティリスクを生じさせる恐れがある設定を使用する可能性があります。
チェックを手動で実装する
手動でJWTの検証を行う場合、実装が正しく行われなかったり、一部の重要な詳細が抜けたりして、重大なセキュリティ脆弱性につながりかねません。このため、JWTの手動検証は控えてください。ほとんどのJWTライブラリーは、JWT検証をユーザーに代わって処理します。お使いのプラットフォームとプログラミング言語用のJWTライブラリーを検索するには、JWT.ioにアクセスしてください。 JWTを手動で検証する方法については、「RFC 7519」を参照してください。Auth0が発行したJWTにはすべて、JSON Web Signature(JWS)が付いています。つまり、暗号化でなく署名されていることを表します。RS256で署名されたトークンを検証する
RS256で署名されたトークンを検証するには、以下のようにします。- [Dashboard]>[Applications(アプリケーション)]に移動します。
- **[Settings(設定)]ビューで、[Advanced Settings(高度な設定)]**を開きます。
- **[Certificates(証明書)]ビューに移動し、[Signed Certificate(署名付き証明書)]フィールドを見つけて、[Public Key(公開鍵)]**をコピーします。
- JWT.ioのWebサイトに移動し、**[Algorithm(アルゴリズム)]ドロップダウンから[RS256]**を選択します。
- **[Verify Signature(署名の検証)]**セクションを見つけて、前にコピーした公開鍵を
-----BEGIN PUBLIC KEY-----
から始まるフィールドのコンテンツの代わりに貼り付けます。
https://{yourDomain}/.well-known/jwks.json