すこぶる.net

技術系備忘録など

Web 認証

認証のJWTって何?

投稿日:

JWTの仕組み

JWT(JSON Web Token)は、ユーザー認証情報を含む自己完結型のトークンを扱います。読み方は ”ジョット” です。
ヘッダー、ペイロード、署名の3部分で構成され、秘密鍵で署名し、トークンはクライアント側で保存され、リクエスト時に使用し、サーバ側で検証します。

JWTの主なメリットとしては、サーバ側で状態(セッション)を管理する必要がないためスケーラビリティに優れている点だと思います。

JWT認証を試してみる

今回は Golang で実装してみますが、echoというフレームワークを使用します。

先にコードを記します。

 

それでは、プログラムを実行してJWTから返ってくるトークンを確認します。

JWTのトークンの中身はbase64でデコードすれば確認可能なので見てみます。

 

また、 https://jwt.io/ でトークンの検証を行うこともできます。”Signature Verified” と表示されていれば検証がうまくいっています。

テキトーな例ですが、結局中身を簡単に確認できるわけなので以下の注意が必要かと思います。

  • JWTには個人情報などは含めない
  • トークンには期限を設定する

そして、ヘッダとペイロードが変更されても、署名が一致しないため成りすましを防止できます。

ちなみにJWTには登録済みのクレームがあるのでそちらもご確認ください。(iss, sub, exp…)
https://tex2e.github.io/rfc-translater/html/rfc7519.html#4-1–Registered-Claim-Names
上記では入れてませんが sub にユーザ固有の識別子をいれるなどすると良いと思います。

 

まとめ

JWTは多くのライブラリやフレームワークでサポートされているため、実装が容易であり、複数のサービス間で認証情報を共有するのに適しており、マイクロサービスアーキテクチャにおいても有効な手段となります。

-Web, 認証
-,

執筆者: