🍎
コマンドラインでHS256のJWTを作成してみる
はじめに
単純にトークンを生成したいという場合は https://jwt.io/ を使ったり、ライブラリの使用をおすすめします
この記事では、コマンドを1行1行実行していくことで、あーJWT(HS256)ってこういう感じで作ってるのねってのを実感するくらいのことができます
コマンドラインでHS256のJWTを生成
Headerをbase64エンコードする
Header
{
"alg": "HS256",
"typ": "JWT"
}
base64の実装注意点より、base64コマンド結果から=
を取り除いたり/
や+
を-
にリプレイスする必要がある点に注意してください(今回の記事では都度必要な処理をいれてます)
user@host: ~/workspace $ echo -n '{"alg":"HS256","typ":"JWT"}' | base64
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
user@host: ~/workspace $ export HEADER="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
Payloadをbase64エンコードする
Payload
{
"exp": 1618911178,
"iat": 1618910878,
"sub": "d395e2d3-1d4c-4e58-8a18-5a19fd0e4627",
"typ": "Bearer"
}
※ Payloadの構成情報としては参考にしないでください
user@host: ~/workspace $ echo -n '{"exp":1618911178,"iat":1618910878,"sub":"d395e2d3-1d4c-4e58-8a18-5a19fd0e4627","typ":"Bearer"}' | base64 | sed 's/=$//'
eyJleHAiOjE2MTg5MTExNzgsImlhdCI6MTYxODkxMDg3OCwic3ViIjoiZDM5NWUyZDMtMWQ0Yy00ZTU4LThhMTgtNWExOWZkMGU0NjI3IiwidHlwIjoiQmVhcmVyIn0
user@host: ~/workspace $ export PAYLOAD="eyJleHAiOjE2MTg5MTExNzgsImlhdCI6MTYxODkxMDg3OCwic3ViIjoiZDM5NWUyZDMtMWQ0Yy00ZTU4LThhMTgtNWExOWZkMGU0NjI3IiwidHlwIjoiQmVhcmVyIn0"
Signatureを生成する
user@host: ~/workspace $ export MESSAGE="$HEADER.$PAYLOAD"
user@host: ~/workspace $ export SECRET_KEY="secret"
user@host: ~/workspace $ echo -n $MESSAGE \
| openssl dgst -hmac $SECRET_KEY -sha256 -binary \
| base64 | sed -e 's/=$//' -e 's/+/-/'
8x-GyBqq7dQ1DPyBnZEpoztGjJZHJRlAH8h1NsObNIY
user@host: ~/workspace $export SIGNATURE="8x-GyBqq7dQ1DPyBnZEpoztGjJZHJRlAH8h1NsObNIY"
JWTを作成
user@host: ~/workspace $ export JWT="$HEADER.$PAYLOAD.$SIGNATURE"
user@host: ~/workspace $ echo $JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MTg5MTExNzgsImlhdCI6MTYxODkxMDg3OCwic3ViIjoiZDM5NWUyZDMtMWQ0Yy00ZTU4LThhMTgtNWExOWZkMGU0NjI3IiwidHlwIjoiQmVhcmVyIn0.8x+GyBqq7dQ1DPyBnZEpoztGjJZHJRlAH8h1NsObNIY
https://jwt.io/ などを使って↑の結果が問題ないか見てみると良いです
Discussion