メインコンテンツへスキップ
(JWT、「jot」と発音) は、情報を JSON オブジェクトとして当事者間で安全にやり取りするための、コンパクトで自己完結的な方法を定義したオープン標準 (RFC 7519) です。改めて言うと、JWT は標準規格です。つまり、すべての JWT はトークンですが、すべてのトークンが JWT であるとは限りません。 JWT は比較的小さいため、URL、POST パラメーター、または HTTP ヘッダーで送信でき、すばやく転送されます。JWT には、データベースに複数回問い合わせなくて済むよう、エンティティに関する必要な情報がすべて含まれています。また、JWT の受信者は、トークンを検証するためにサーバーへ問い合わせる必要もありません。

利点

  • コンパクト: JWT はサイズが小さいため、HTML や HTTP の環境でやり取りするのに適しています。
エンコードされた JWT と SAML トークンの比較
  • セキュア: JWT では、X.509 証明書の形式で公開鍵と秘密鍵からなるキーペアを使用して署名できます。また、共有シークレットを使用して HMAC アルゴリズムで対称鍵署名することもできます。詳しくは、署名アルゴリズム を参照してください。
  • 一般的: JSON パーサーは、ほとんどのプログラミング言語でサポートされています。

用途

  • 認証: ユーザーが認証情報を使用してログインに成功すると、IDトークン が返されます。OpenID Connect (OIDC) 仕様によると、 は常に JWT です。
  • 認可: ユーザーがログインに成功すると、アプリケーションはそのユーザーに代わってルート、サービス、またはリソース (たとえば API) へのアクセスを要求できます。そのためには、アプリケーションはすべてのリクエストで を渡す必要があります。これは JWT の形式である場合があります。
  • 情報のやり取り: JWT は、当事者間で情報を安全にやり取りするための優れた方法です。署名できるため、送信者が本人であることを確認できます。さらに、JWT の構造により、内容が改ざんされていないことも検証できます。

セキュリティ

JSON オブジェクトに含まれる情報は、デジタル署名されているため、検証可能で信頼できます。JWT は、当事者間の秘匿性を確保するために暗号化することもできますが、Auth0 が発行する JWT は JSON Web Signature (JWS) であり、暗号化ではなく署名されています。そのため、ここでは署名付きトークンに焦点を当てます。署名付きトークンでは、内部に含まれるクレームの完全性を検証できます。一方、暗号化されたトークンでは、それらのクレームを他の当事者から隠すことができます。 一般に、JWT は共通シークレット (HMAC アルゴリズム) を使用するか、RSA または ECDSA を使用した公開鍵/秘密鍵のキーペアで署名できます (ただし、Auth0 がサポートするのは HMAC と RSA のみです) 。トークンが公開鍵/秘密鍵のキーペアで署名されている場合、その署名は、秘密鍵を保持する当事者だけが署名を行えたことの証明にもなります。 受信した JWT は、使用する前に署名を使用して適切に検証する必要があります。正常に検証されたトークンは、そのトークンに含まれる情報が他者によって改ざんされていないことを意味するだけである点に注意してください。これは、平文で保存されている内容を他者が見られなかったことを意味するわけではありません。そのため、JWT 内に機密情報を保存してはなりません。また、JWT が傍受されないようにするため、JWT は HTTPS 経由でのみ送信する、ベストプラクティスに従う、安全で最新のライブラリのみを使用する、といった追加の対策も講じる必要があります。

詳細情報