LoginSignup
15
7

JWTとJWSとは何か

Last updated at Posted at 2023-02-23

概要

今回はJWTJWSについて自分の中でうまく説明できないことに気づき、改めて仕組み等を調べたのでアウトプットとしてこちらに記載していきたいと思います!

JWTとは

まず、JWTとはJSON Web Tokenの略でよく認証などに用いられる仕組みです。

先に言っておくとJWTは、それ自体が認証について何か規定しているわけではなく認証を行う際に利用される仕組みに過ぎません。

なのでJWT=認証ではないということは気に留めておいた方がいいかもしれません。

ではJWTは何をするのか?

JWTは何をするのか

JWTの役割は制約のあるHTTPヘッダやクエリパラメータにJSONデータをうまく付与できるようにすることです。

主に役割は2つあります。

  1. JSONデータをURLセーフ(Base64URLでエンコード)にする
  2. JSONデータをコンパクトにする

1. データをURLセーフにする

URLセーフとはURLとして正常に使用できる文字列にするということです。

たとえば、?=&などのようなものは、パラメータなどに解釈されてしまうので

そうならないようにBase64URLエンコードし、文字列として解釈してもらえるようにします。

2. データをコンパクトにする

これはJSONデータのクレーム名を省略することでデータを小さくすることです。

クレーム名とはJSONデータのキーとなる部分のことを指し、下記のようなものがあります。

クレーム名 説明
expiration JWTの有効期限
issuer JWTの発行者
... ...

他にもたくさんあるので詳しく知りたい方は下記を参照してください。

実際に下記のようなものをデータのクレーム名を省略してデータを形成します。

{
    "issuer": "sample.jwt",
    "expiration": 1670085336,
    ...
}

省略後

{
    "iss": "sample.jwt",
    "exp": 1670085336,
    ...
}

JSONデータをBase64URLでエンコード

最終的にJSONデータを下記の図のようにエンコードしてJWT生成されます。

image.png
引用:基本から理解するJWTとJWT認証の仕組み

JWSとは

JWSとはJSON Web Signatureの略でJWTが本物か、もしくは中身が改ざんされていないかを検証する仕組みのことです。

JWTはJSONデータをBase64URLでエンコードしたデータのことでした。

しかし、デコードしデータの中身を変更し再度エンコードすれば簡単に中身を改ざんできてしまいます。

それを防ぐためにJWSという仕組みがあります。

ではJWSは何をするのか?

JWSは何をするのか

結論、暗号鍵を利用して最終的にヘッダ.ペイロード.シグニチャで形成された文字列を生成します。

image.png
引用:基本から理解するJWTとJWT認証の仕組み

先ほど出てきたJWTが真ん中に入る形になっています。

流れとしては下記になります。

なお今回は秘密鍵方式を前提としてます。

1. ヘッダをBase64URLでエンコード
2. JWTをBase64URLでエンコード
3. エンコードしたヘッダとJWTをヘッダの`alg`で指定されているアルゴリズムを利用して暗号鍵によって暗号化
4. 暗号化したシグニチャをBase64URLでエンコード
5. 各エンコードした値を`.`で繋ぐ

ちなみにヘッダのalgは必須です。

algは暗号化を行う際のアルゴリズムを指定しており、

これがないとどのアルゴリズム利用して暗号化されたかわからず検証することができません。

検証の流れ

検証の流れはJWS生成の逆を行うことでできます。

image.png
引用:基本から理解するJWTとJWT認証の仕組み

流れとしては下記です。

1. JWSのシグニチャ部分をBase64URLでデコードする
2. デコードしたものを暗号鍵で復号化
3. 復号化したものとJWS内のヘッダとJWTを比較し検証

まとめ

いかがだったでしょうか。

今回調べたことでJWT認証がごっちゃになっていたのが解決しました。

次はJWTを利用した認証機構について調べたいと思います。

最後まで読んでいただきありがとうございました!

参考

15
7
1

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
15
7