多くのWebアプリケーションでは、JWT (Json Web Token)が活用されています。JWT認証は現在主流の認識方式として、多くの開発者に利用されています。本文では、JWTの構成、仕組みなどの基本情報を紹介した上、使いやすいツールを使って、JWT認証を簡単に行う方法を皆さんに紹介していきたいと思います。
JWT (Json Web Token)とは
JWT (JSON Web Token) とは、JSON形式で記述されたトークンの一種です。JWTには3つの要素が含まれています。
- ヘッダー (Header): トークンのタイプとハッシュアルゴリズムなどのメタデータ
- ペイロード (Payload): トークンに含まれる実際のデータ
- 署名 (Signature): ヘッダーとペイロードを元に計算される電子署名
これらはドット(.)で区切った文字列として表現されます。
xxxxx.yyyyy.zzzzz
JWT の特徴として、独自の署名機能によりデータの改ざん検知が可能であることがあげられます。またトークン単体でデータを含むため、サーバーでのデータ参照が不要なステートレスな認証が実現できます。これらの利点から、Web API等での認証・認可によく利用されるようになっています。
JWTの構成
上記の内容から、JWTは、ヘッダー、ペイロードと署名といった3つの要素から構成されています。次は、JWTの構成要素をサンプル付きで詳しく解説していきます。
JWTのヘッダー
JWTの先頭部分になります。トークンのメタデータがJSON形式で記述されます。
{
"alg": "HS256",
"typ": "JWT"
}
- alg: ハッシュアルゴリズム(この例ではHMAC SHA-256)
- typ: トークンのタイプを示す
JWTのペイロード
JWTの中身の部分です。クレームと呼ばれる名前と値のペアのJSONオブジェクトになります。
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
- sub: subjectの略。ユーザーを特定するid
- name: ユーザー名
- admin: 管理者アクセスの可否
JWTの署名
JWTの署名は、ヘッダーとペイロードに基づいて生成される電子署名になります。次は、ヘッダーとペイロードを連結し、秘密鍵(secret)を使ってHMACで署名した例になります。また、base64 encode/decodeも行っていることもよく見られます。
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
このようにして、ヘッダー、ペイロード、署名をドットで区切って連結することでJWTが完成します。
JWT認証の仕組み
JWT認証の仕組みは以下のような流れで行われます。
- ユーザーが認証情報(ID/パスワードなど)を送信してログイン
- サーバーが認証情報を検証し、正しい場合にJWTを発行
- 発行されたJWTにはヘッダー、ペイロード、署名の要素が入っている
- ユーザーは発行されたJWTをリクエストヘッダーに含めてサーバーに送信
- サーバーはJWTの署名を検証し、内容が改ざんされていなければトークンは有効と判断
- 有効なJWTが送信されていれば、ペイロードに含まれるユーザー情報などを利用して認証済みとしてリソース提供可
- JWTの有効期限が切れると無効として扱われ、再ログインが必要になる
つまり、事前に発行されたJWTを利用してAPIなどサーバーリソースにアクセスし、トークンベースの認証を実現しているので、すーと(状態)をサーバー側で保持する必要がないためスケールしやすいアーキテクチャとなっています。
一番簡単な方法でJWT認証を行う方法
それでは、Webアプリを実際に開発する際に、JWT認証を行う必要がある場合、どうしたらいいですか?次は、Apidogという非常に使いやすいAPI管理ツールを使って、簡単にJWT認証を行うことができます。
Apidogを開き、APIリクエストの送信画面で「Auth」タブに切り替えると、タイプを「JWT」に指定することができます。そして、同じ画面でJWTの詳細情報を記入して、「送信」ボタンをクリックすれば、簡単にJWT認証を行うことができます。
ApidogというGUIツールを使って、非常に直感的な操作でJWT認証を行うことができるので、開発者にとって非常に重宝のツールになるのでしょう。
まとめ:JWTとJWT認証を実践的に理解
WebアプリケーションやAPIサービス等で広く採用されているJWT(JSON Web Token)を用いた認証は、ステートレスなトークンベース認証を実現できるため、スケーラブルな認証インフラストラクチャを提供します。しかし、JWT認証を初めて導入する際には、その仕組みや構成要素(ヘッダー、ペイロード、署名)の理解が必要で敷居が高くなりがちです。
そこでオススメなのが、Apidogという使いやすいGUIベースのAPI管理ツールを利用することです。Apidogであれば、直感的なUI操作だけで簡単にJWTトークンの発行や送信、検証を試すことができます。JWT認証時のリクエストヘッダーやレスポンス、ステータスコードなども確認できるので、開発者にとって丁度いい実践的な学習ツールになります。