😇

【セキュリティ】JWT(JSON Web Token)

1 min read

JWTを作るための前提知識にはBase64ハッシュ関数の知識で十分なので,それぞれ説明して,最後にJWTについて書きます.ただし,JSONが何であるかは書きません.

本記事は,この記事を参考にしています.

Base64, ハッシュ関数

Base64は任意の文字列を英数字のみの文字列にエンコードする技術です.

Base64でエンコードした文字列はデコードして再びその文字列を獲得できます.

これ(Base64)は下のようなイメージです.

x_{string} = f_{decode} \Bigl( f_{encode}(x_{string}) \Bigr)

また,ハッシュ関数

  • 原像計算困難性(ハッシュ関数の出力から入力を推測することは難しい)
  • 第2原像計算困難性(同じハッシュ値を出力する別の入力を見つけることは難しい)
  • 衝突困難性(ハッシュ値は被りづらい)

という性質を持つ関数です.

まあ.これはかんたんに言い換えると,データをシュレッダーにかけて元に戻せないハッシュ関数と,誰でも戻せるBase64のような感じでしょうか.

また,特定の人しか戻せないものは暗号化でしょう.

JWT(JSON Web Token)

JWT<ヘッダー>.<ペイロード>.<署名>の形式で表します.

例)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

また,Base64urlは先程書いたBase64をURLで用いることのできる文字だけを使ってエンコードするものです.

これは簡単に実装できます.
具体的には,

<ヘッダー>部には,

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

Base64urlでエンコードしたもの.(これは必須なデータ)

<ペイロード>部には,(参考資料より引用した)

{
  "admin": true,
  "name": "John Doe",
  "sub": "1234567890"
}

などの必要な情報をBase64urlエンコードしたもの.(これは自由に指定できるデータ)

<署名>には,
ヘッダー部とペイロード部を連携し,algで指定したハッシュ関数にかけ,その結果をBase64urlでエンコードします.

そして,これら3つの文字列をドットでつなぐとJWTが完成します.

Discussion

ログインするとコメントできます