質問: JWTの構造は、ヘッダー、ペイロード、シグネチャーで、ヘッダー+ペイロードをそれぞれbase64urlエンコードしヘッダーのアルゴリズムで計算した署名をシグネチャとして結合していると理解しています。 そこで、途中で第三者がペイロードを改ざんし、シグネチャを再計算してをトークンを生成し送付すると、改ざんが可能な気がしますが、そこら辺の改ざん検知の担保ってどの様な仕組みが仕様化されているのでしょか?
回答: 基本的には「署名」の計算には「鍵」が必要です。 JWTの実際の署名の仕組みはよくはしりませんが、簡単な例で説明すると ■ 署名 `data = "改ざんされたくない情報"` `secret_key = "ひみつの鍵"` `signature = Hash(secret_key + data)` として、 `(data, signature)` を公開する ■ 検証 `(data, signature)` のペアが正しいか(自分が署名したものか)を検証するには、 `Hash(secret_key + data) == signature` を調べれば良い、という感じになります。 第三者には `secret_key` がわからないので、 改ざんしたデータに対して正しい署名が計算できない、という理屈になります。