JWTの署名アルゴリズムについて
2024-04-08目次
2種類の暗号化方法
JWTの署名には何者かによってトークンが改竄されていないことを保証する必要があります。
署名の生成には大きく分けて次の2種類が存在しています。
- 非対称アルゴリズム(RS256など)
- 対称アルゴリズム(HS256など)
非対称アルゴリズムの仕組み
非対称アルゴリズムでは秘密鍵と公開鍵の2つの鍵を利用します。
トークンの発行者(ex:IdP)は、秘密鍵を使って署名を生成します。
検証する際は公開鍵を用いて、JWT署名を検証する。
大抵の場合は公開鍵を特定のエンドポイントで公開していて、利用者はエンドポイントを使って公開鍵を取得することができる様になっています。
対称アルゴリズムの仕組み
対称アルゴリズムでは、署名の生成と検証に同じ秘密鍵を利用します。
秘密鍵をIdPとクライアントが両方保持して、署名の生成・検証を行います。
鍵が漏洩してしまった時のリスクが高く、リソースサーバーが増えるたびにそこでも鍵を保持しないといけません。
また鍵を持っていれば、IdPではなくとも署名の生成が可能となってしまいます。
非対称アルゴリズムと対称アルゴリズムはどちらを使うべきか?
書き振りからわかるかもしれませんが、基本的には非対称アルゴリズムを用いるのが好ましいとされている様です。
非対称アルゴリズムを使うことで、署名できるのは秘密鍵の所有者だけになるし、公開鍵を誰でも使うことができます。
HS256で万が一秘密鍵が漏洩した場合は、新しい秘密鍵を全てのアプリケーションやAPIなどで再度デプロイする必要がります。