skillup

技術ブログ

プログラミング全般

JWT(ジョット)の認証に関して

投稿日:2021年1月17日 更新日:

セッションやtokenを使った、認証について色々書いてきましたが、今回はJWTを使った認証について。

以前の認証がらみの記事

ログインしたままにするの挙動に関して(ステートフル認証の基本的な仕組みの復習もかねて)

トークン認証に関して

JWT(ジョット)とは?

Json Web Tokenの略で、Json形式をした認証情報を加工してtokenとして認識させる認証システムのことになります。ちなみに読み方はジョットのようです。

大きく分けると下記の3つの情報が含まれています。

ヘッダー

認証アルゴリズムやtoken情報などのメタ情報を含む要素。

デコードすると下記のようなデータになります。

クレーム情報(ペイロードとも言います。)

Body的な要はユーザーの認証情報を含む要素です。例として、下記のようにユーザーID,パスワードなどを含んだものが多いです。

署名

暗号化のアルゴリズムを使い、ヘッダー、ピリオド、エンコード済みペイロード、ピリオドを連結したものに文字通り、署名を行い、Base64Urlエンコードを行います。

実際には以下のような文字列になります。ピリオドが2箇所ありますが、これがヘッダーとペイロード、署名の区切りになっています。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

下記のURLで実際の暗号化を行うことができます。

https://jwt.io/

また下記のサイトでは1プロセスずつの紹介もしています。

JSON Web Tokenによる認証

メリット

  • 署名が含まれているため、改ざんがあってもチェックできる
  • 有効期限をつけるなどセキュアなtoken発行が楽にできる
  • URLに含めることができるため、取り扱いが楽
  • 認証状をサーバー側で持つ必要がない
  • 任意のデータをトークンに含めることができる
  • 署名アルゴリズムを選択可能
  • (token方式自体のメリットですが)セッションをサーバー側で管理しなくて良いので、スケールアウトが簡単
  • tokenを発行するサーバーと認証をするサーバーを別々にできる(Oauthの特徴。)

デメリット

  • 署名のアルゴリズムでnone(なし)が選択でき、これが改ざんされる可能性がある
  • JWTをlocalStorageで保存する場合、JavaScriptなどでぬきとられる可能性がある

基本的なプログラムの流れ

サンプルソース

https://github.com/umanari145/phptips/tree/master/jwt

  1. ログイン画面などでUSER_ID,PASSWORDなどを使った認証ロジックにアクセス
  2. JWTの認証ロジックにより、tokenが有効時間付きで変換される
  3. tokenはCookieかWebStorageに保存しておく
  4. ログイン後の画面では発行されたtokenを必ず含んで、アクセスを行う

上記の1〜2にあたる部分がサンプルソースのlogin.php、4にあたる部分がdata.phpになります。

参考リンク

JWT(JSON Web Token)の「仕組み」と「注意点」

JSON Web Token(JWT)の紹介とYahoo! JAPANにおけるJWTの活用

JWTは使うべきではない 〜 SPAにおける本当にセキュアな認証方式 〜

PHP による単純な JWT 認証の例

↑サンプルソースはほぼここのものを流用させていただきました。

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ダミーデータの作り方 まとめ

現在作っているアプリを顧客先で見せる機会があり、そのためダミーデータを入れる、という仕事がありました。 といっても画面からポチポチやったんでは時間もかかりますし、何より精神的にやられてしまいます。(汗 …

no image

Simple Factoryパターンについて

今回はデザインパターンの一種であるSimple Factoryパターンに関して。 Contents1 Simple Factoryパターンとは2 サンプルコード3 解説 Simple Factoryパ …

no image

サロゲートキーと主キーに関して

今までも何度か触れたサロゲートキーと主キーに関して。 今までの参考リンク 論理設計のグレーノウハウ サロゲートキー サロゲートキーに関して 主にシステム設計的な考察が多かったので、今回はユースケースか …

no image

テストプロセスに関して

日々是テスト。 プログラマになってから数年がたちますが難点はずっと同じでテストですね(汗) 以前にかいたエントリーなどは下記参照。 参考 データベースによるテストデータ作成 Excelによるテストデー …

no image

オブジェクト指向について その1

ちょっと最近、仕事でソースの書き方がいい加減になってきたのでオブジェクト指向について考え方を再確認しようと思います。 参考文献 SoftWareDesign 2015年9月号 何も考えずにプログラムを …