1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

前回の記事

前回の記事では作成されたJWTをデコードして中身を確認しました。
今回は作成したJWTを検証してみます。

JWTの検証をやってみる

  1. まず,JWTの署名に使われている暗号化形式を調べます

    cat jwt_sample.txt
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    
    awk -F "." '{print $1}' jwt_sample.txt | sed 's/-/+/g; s/_/\//g' | awk '{ l=length($0) % 4; if (l > 0) printf "%s%s", $0, substr("==", 1, l); else print $0 }' | base64 -d
    {"alg":"HS256","typ":"JWT"}
    

    前回の記事を参照
    :

  2. HS256形式の署名を作成します。your-256-bit-secretが共通鍵です。

    awk -F "." '{print $1 "." $2}' jwt_sample.txt | tr -d '\n' | openssl dgst -hmac "your-256-bit-secret" -sha256 -binary | base64 | sed -e 's/+/-/; s/\//_/g; s/=//g'
    SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    

    JWTのヘッダとペイロードを.で連結したものからtrで改行を削除し,opensslで作ったバイナリをbase64urlでエンコードしています。
    :

  3. 元のJWTの署名部分と比較してみる

    awk -F "." '{print $3}' jwt_sample.txt 
    SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    

    2と同じ値になっているのでJWTが改ざんされていないことがわかります。


1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?