4
4

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とは? アクセストークンとの違い。両者のメリット、デメリット

Posted at

エンジニアしていると色々なトークンに出会うと思うのですが、今回はJWTとアクセストークンの違いがあまりはっきりしなかったので、理解するために記事にしました!

まずJWTトークンとは

JWT(Json Web Token)とは...

1.クライアントとサーバー間で情報を安全にやり取りするために使用されるJSON型のオブジェクトのトークン!
2.ペイロード内に情報を含むため、サーバー側でトークンを保持する必要がない!

JWTはヘッダー、ペイロード、署名で成り立っており、それぞれ以下の内容を定義、確認します。

ヘッダー:このスペースには、トークンのタイプと関与する署名アルゴリズムを定義します。
ペイロード:このセクションには、トークン発行者、トークンの有効期限などを定義します。
署名:安全な署名によって転送中にメッセージが変更されなかったことを確認します。

引用元:JSON Web Token(JWT)とは:特殊な形式の認証トークン

JWTのメリット、デメリット

続いてJWTのメリットです。

ステートレス認証

JWTにはトークン自体に必要な情報が含まれているため、サーバーがセッション情報を保存する必要がない。
代わりにトークンはクライアントサイドで保存されるため、アプリケーションはスケールアウトが容易になり、ステートレスなサービスが実現できる。
つまり分散システムやスケーラビリティの高いシステムに適している。

デジタル署名:

JWTはHMACやRSA署名を使って暗号化されているため、改ざんが困難。

パフォーマンス

セッション情報をサーバー側で管理する必要がないので、サーバーの負荷が減り応答時間の向上が期待できる。

拡張性

JSONベースであることから拡張が容易。必要であればJSONに新しいフィールドを追加するだけ


これに対してデメリットとしては、

サイズが大きくなる可能性

JWTは、多くの情報を含むため、トークンサイズが大きくなることがある。
特にCookieやHTTPヘッダーを通して送信する際にパフォーマンスに影響を与える可能性がある。

無効化が困難:

JWTはサーバー側で状態を保持しないため、トークンを即時無効化するのが難しい。
通常、トークンが有効期限まで使われ続けてしまうため、トークンの無効化のためにはブラックリストを実装する必要がある。

悪用のリスク

JWTが盗まれた場合、トークンの有効期限が切れるまで攻撃者がユーザーとして行動できてしまう。
HTTPSでもクライアントサイドでのトークンの扱いには注意が必要。

参考:JWT認証とは?

アクセストークンとは

特定のWebサービスを利用するために、認証局がユーザーを認証するために発行した認証情報

一般的にはOAuthで発行されるやつですね。

OAuthに関してはこちらの記事がわかりやすいですね。

引用元アクセストークンとは?-Webサービスにおけるユーザー認証-

メリット

ではアクセストークンのメリットは....

トークンの無効化が容易

アクセストークンはサーバー側でセッション情報として管理されるため、サーバー側でアクセストークンを削除するだけで即時無効化することが可能。
JWTだとブラックリスト化等の対応が必要なので、こちらは楽で良いですね

軽量

アクセストークン自体は非常に短く、ペイロードに余計なデータを含まないため、サイズが小さく、HTTPヘッダーやCookieを介して送信する際にパフォーマンス上の問題になりにくい。

セキュリティがシンプル

アクセストークンはシンプルにセッションIDのような役割を果たすので、すべてのユーザーデータや認証データはサーバー側で管理されることから、クライアント側に重要なデータが残らない。

デメリット

ステートフル

JWTと異なり、セッションの状態をサーバー側で保持する必要があるため、スケーラビリティや分散環境では管理が煩雑になる。

悪用のリスク

悪意のあるWebサービスにアクセストークンを受け渡してしまった場合に、なりすましやアカウント情報の書き換えなどのリスクがある。
JWTも同じでトークンの取り扱いには注意ってことですね

参考記事:https://logmi.jp/tech/articles/325886

まとめ

二つのメリット、デメリットをまとめるとこんな感じでしょうか!?

特徴 JWTトークン 通常のアクセストークン
ステート ステートレス ステートフル
サイズ 大きくなりやすい 軽量
無効化 ブラックリストが必要、即時無効化が困難 サーバー側で簡単に無効化可能
セキュリティ 署名付きで改ざん防止、ペイロードにデータ含む トークン自体にデータは含まず、サーバー側で管理
スケーラビリティ 高い(分散システムに適している) サーバー側で状態を管理する必要あり

ちゃんとそれぞれ特性があることを理解しないとですね〜

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?