JWT

JWTとは

ジョットと読む。

JWTは従来のセッションキーをクライアント・サーバ間でやり取りしてセッションを維持する方法に対して、JSON形式のトークンにユーザ情報を格納した上で暗号化し、その暗号化データをクライアント・サーバ間でやり取りしてセッションを維持する方法である。

セッションキー方式ではセッションキーを元にしてサーバ側でユーザ情報をDBから検索する必要があるのに対し、JWTではユーザ情報そのものがトークンに入っているので復号すればDBアクセスなしにすぐにユーザ情報を使用できる点でパフォーマンスに優れる。ただし、ログイン(認証)時は当然DBアクセスが必要。

一方JWTのトークンデータはセッションキーよりサイズが大きくなりがちであり、トークンの受け渡し方式がcookieであれば4096バイト制限に引っ掛かりかねない点がデメリットである。
また、暗号鍵が漏洩すればユーザが自身のトークンを復号して内容を確認できるというリスクがあるのもデメリットである。ユーザごとに暗号化鍵を変えることで万が一トークンが漏洩してもトークンの復号は困難にはなる。

なお、暗号化は共通鍵暗号方式でも公開鍵暗号方式でも良い。クライアント側で情報を利用する必要があるなら公開鍵暗号方式を利用し、不要であれば共通鍵暗号方式を利用する。

 

JWTの受け渡し

JWTはセッション情報の保持についての仕様であり、そのクライアント・サーバ間での受け渡しについては規定しておらず任意である。

ただ基本的にはセッションキーと同じ、従来からの方法を使用することとなる。

 

JWTの使い方

各プログラミング言語の各ライブラリを使用するのが簡単ではあるが、JSON+暗号化・復号を自前で行うのであれば特にライブラリは不要でる。

使用できるライブラリはこちらを参考


Notice: Trying to get property 'queue' of non-object in /usr/local/wordpress/wp-includes/script-loader.php on line 2876

Warning: Invalid argument supplied for foreach() in /usr/local/wordpress/wp-includes/script-loader.php on line 2876