トークン認証 ~ JWT ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/07/31/000000

で、認証方法として、JWT(JSON Web Token)がでてきたので
調べてみた。

目次

【1】JWT(JSON Web Token)
【2】特徴
【3】構成
 1)ヘッダー (Header)
 2)ペイロード (Payload)
 3)署名 (Signature)

【1】JWT(JSON Web Token)

* JSON形式で表現された認証情報をURL文字列として
 安全に送受信できるよう規定した標準規格(RFC 7519)
* 読み方は「ジョット」らしい

【2】特徴

* JSONオブジェクトをスペースのない文字列で表現したトークンを使用
* 改竄やなりすましが行われていないこと

【3】構成

[ヘッダー].
[ペイロード].
[署名]

=> それぞれBase64方式で符号化し「.」で連結したものがトークンとなる

トークン例

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik1pa2UiLCJpYXQiOjE1MTYyMzkwMjJ9.QAv4o1H_Xg1eeKt1BcnZHsfie2gvVv2iYD0mwdRq7t4

1)ヘッダー (Header)

* トークンのタイプと関与する署名アルゴリズムを定義

HEADER例

{
  "alg": "HS256",
  "typ": "JWT"
}

* alg : 署名アルゴリズム
* typ: トークン種別

2)ペイロード (Payload)

* トークン発行者、有効期限などを定義

PAYLOAD例

{
  "sub": "1234567890",
  "name": "Mike",
  "iat": 1516239022
}

* sub : ユーザ識別子 (subject)
* iat : トークン発行日時 timestamp (issued at)

3)署名 (Signature)

*トークン作成者の証明に用いるデータ
* ヘッダーとペイロードを符号化したものを連結し、
 本人の秘密鍵とともに署名アルゴリズムで計算することで生成され、
 受信側で対になる公開鍵を使って検証する
 => これにより、転送中にメッセージが改竄や偽造が行われていないか
  確かめることができる。

参考文献

https://qiita.com/knaot0/items/8427918564400968bd2b
https://techblog.yahoo.co.jp/advent-calendar-2017/jwt/
https://zenn.dev/mikakane/articles/tutorial_for_jwt
https://www.okta.com/jp/identity-101/what-is-token-based-authentication/

関連記事

トークン認証 ~ OAuth ~
https://dk521123.hatenablog.com/entry/2022/07/21/000000
シングルサインオンSAML認証方式 ~
https://dk521123.hatenablog.com/entry/2022/06/09/174851
IDフェデレーション
https://dk521123.hatenablog.com/entry/2022/10/18/185246
Adobe Analytics ~ API編 ~
https://dk521123.hatenablog.com/entry/2022/07/31/000000