やっほー
JWTって何?仕様や特徴・構成を超簡単に解説!

JWTって何?仕様や特徴・構成を超簡単に解説!

JWTって何や?

JWTとはざっくり言うとトークンのことですが、僕はAWS Cognitoの勉強をしている時に出くわしました。

今回はそんなJWTについて見ていきましょう!

JWTとは

JWTは、「Json Web Token」の略です。

セキュアなトークンを発行するための標準仕様になります。

JWTの発音

どうやら「ジョット」と呼ぶらしいです。

JWTの特徴

JWTの特徴は以下になります。

  • 標準の仕様である
  • 仕様がシンプルである
  • 暗号化されていない
  • 署名アルゴリズムが選択可能である
  • URL-safeである

JWTの使われ方

JWTはトークンなので、発行者からトークンが発行され、クライアント側はそのトークンを使用し認証を行います。

流れは以下のようになります。

  1. 認証サーバに認証情報を渡し、トークンを請求する。
  2. 認証サーバは秘密鍵を使って署名したトークンを発行する。
  3. クライアントは発行されたトークンを使用し、サーバとのやり取りをする。
  4. 認証サーバは秘密鍵を使用してトークンを検証する。
発行されたトークンを書き換えることで、別のユーザとして認証を成功させることができます。
これが、JWTにセキュリティの脆弱性があると言われる所以です。

JWTの構成

説明だけでは分かりにくいので、実際のJWTを見てみましょう。

 

上記が実際のJWTです。

 

JWTを見やすく改行してみました。「.」で3つに区切られており、それぞれに意味があります。

  1. ヘッダ
  2. ペイロード
  3. 署名

1.ヘッダ

ヘッダは、署名を行うために必要な情報を保持しています

JSONデータをBase64でエンコードしたものになります。

2.ペイロード

ペイロードは、やりとりに必要な属性情報を保持しています

ヘッダ同様、JSONデータをBase64でエンコードしたものになります。

3.署名

署名は、署名アルゴリズムで署名されたものです。

こちらもJSONデータをBase64でエンコードしたものになります。

関連記事

Cognitoのトークンをデコードするのってどうしたらええんや?? Cognitoで認証を行うとトークンが払い出されますが、このトークンをデコードしたい場合もあるかと思います。 今回はAngularでの例になりますが、あくまでT[…]

【Cognito】トークンのペイロードをデコードする方法!

AWS Cognito

AWS Cognitoと呼ばれる、AWSのユーザ認証機能でもJWTが使用されています。

Cognitoでは、「ID Token」「Access Token」「Refresh Token」の3つのトークンが発行されます。

関連記事

Angular7でCognito認証を実装したい。 でも、よう分からん! ということで、様々なサイトを参考に、ログイン処理やAPI処理をAngular7で実装してみました。 [sitecard subtitle=Angular[…]

Angular7×Cognitoでログイン・API処理を実装!
関連記事

Cognitoのセッションタイムアウトってどうなっているんでしょうか? 現在、「Angular×Cognito」で開発をしているのですが、どのアプリでもログイン画面ってありますよね? このログイン画面の認証にCognitoを使っ[…]

Cognitoのセッションタイムアウト!トークンを整理する!

JWTを気軽に見るためのツール

以下のツールを使用すると、JWTを気軽にデコードできます。

まとめ

今回はJWTについてまとめてみました。

個人的には、JWTが気軽にデコードできるというのに驚きました。

セキュリティ的にはあまりよろしくないのかなと感じましたが、やはりJSONを使うというのが最近の流れなんでしょうか?

ではまた!

JWTって何?仕様や特徴・構成を超簡単に解説!
フォローしてもらえると泣いて喜びます