JWTが認証で広く使われるようになった理由
JWTを使えば、リクエストのたびにデータベースでセッション情報を照会しなくても、トークン自体が持つ検証可能なクレームと有効期限だけでサーバー側は検証できます。このステートレスな性質は分散システムやAPIとの相性が良い一方、従来のサーバー側セッションに比べて即座に無効化しにくいというトレードオフがあります。
デコードと検証はまったく別の処理
JWTのヘッダーとペイロードは鍵がなくても誰でもデコードできます。それが本物で改ざんされていないことを検証するには、発行時に使われた署名鍵や公開鍵が必要です。デコードしただけで検証していないトークンの内容を、何かの証明として信頼してはいけません。
よくある質問
パスワードなしでJWTのペイロードが読めてしまうのはセキュリティ上の欠陥ですか?
いいえ、それは設計上想定された挙動です。JWTは読めることが前提の仕組みで、提供しているセキュリティ上の保証は署名による改ざん検知(完全性)であり、ペイロード内容の機密性ではありません。
JWTのペイロードを書き換えても使えますか?
デコードしたテキスト自体は書き換えられますが、正しい署名鍵なしに再エンコードすると署名が無効になるため、トークンを正しく検証するサーバーは改ざんされたクレームを受け入れず拒否します。