JWT(JSON Web Token)を理解する。
https://gyazo.com/5d3d2420db5421c5217f3ae3d68e153b
JWTとはなんなのか?
JWT(ジョット)とは JSON Web Token の略で、電子署名付きの URL-safe(URLとして利用出来る文字だけ構成される)な JSONのことです。電子署名により、JSON の改ざんをチェックできるようになっています。
つまりJSON WEB Tokenは、電子著明月のURL-safeなJSONを使った認証方式です。
これの何がいいのか?
一番の大きい利点は電子署名がついているので、改ざんされない事が大きいです。
code:md
①クライアントは、認証情報(ログインIDとパスワード)を送信する。
②サーバは認証情報を取得してuser_idとexp(有効期限)を含む、JSONを秘密鍵で暗号化してJWTとして返却する。
③クライアントは受け取ったJWTを認証リクエストとして扱って、リソースにアクセスを行う。
クライアントから送信されるJWTはサーバで秘密鍵を使って改ざんが行われたかを検証する為、user_idやexpの改ざんを検知する事ができる。
注意点
一度発行したJWTの無効化は難しい。有効時間がおわらない限り残ります。
JWT の中身は Base64 エンコードされただけなのクライアント側から中身が簡単に確認できるので、回避できる手段を考える。
まとめ
以前OAuth2について調査をしていた時は、JWTも別の認証方法の1つなのか?と思っていたが、それは間違いだった。
認証フローの中に組み込まれる仕組みとして提供されるデータ方式がJWTという認識になった。これ自体は認証フローというよりは、あくまでも電子署名を持った暗号化されたJSONデータにすぎない。
OAuth2.0でJWTを使った認可フロー
参考
ねっしーさんの資料