Skip to main content
(JWT、「ジョット」と発音) は、当事者間で情報を JSON オブジェクトとして安全に送信するための、コンパクトで自己完結型の方法を定義したオープンスタンダード (RFC 7519) です。繰り返しになりますが、JWT はあくまで標準規格です。つまり、すべての JWT はトークンですが、すべてのトークンが JWT であるとは限りません。 JWT は比較的小さいため、URL、POST パラメーター、HTTP ヘッダー内で送信でき、高速に転送されます。JWT には、データベースに複数回問い合わせる必要がないよう、対象に関する必要な情報がすべて含まれています。また、JWT の受信側も、トークンを検証するためにサーバーを呼び出す必要はありません。

利点

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

使用法

  • 認証: ユーザーが自分の資格情報を使って正常にログインすると、ID トークン が返されます。OpenID Connect (OIDC) specification によると、 は常に 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 経由でのみ送信し、ベストプラクティス に従い、安全で最新のライブラリだけを使用してください。

詳しくはこちら