コンテンツにスキップ

セッションベース認証とトークンベース認証

セッションベース認証

セッションベース認証はセッションと呼ばれる情報をサーバーに保存し、クライアントのログイン状態を保持する認証方式。

サーバーはセッションを保持する。セッションにはセッション ID とユーザ ID、ロール、有効期限などの情報が含まれる。

クライアントはセッション ID を保持する。

セッションベース認証は後述するトークンベース認証と比べてセッションをサーバーのメモリやデータベースに保存するためスケーラビリティが低いという欠点があるが、一方でサーバーがヤバいと思ったらいつでもサーバー側でセッションを破棄できるという利点もある。

uml diagram

トークンベース認証

トークンベース認証はトークンを使って認証する。

トークンは自身にユーザ ID、ロール、有効期限を持つ。つまり認証に必要な情報すべてである。

トークンはセッションと同様にサーバーで生成されるが、セッションと異なりサーバーで保管しない。トークンはクライアントに持たせる。

クライアントがリクエストするときは併せてトークンを送り、サーバーはトークンを確認することでレスポンスする。

クライアントでトークンを保持することから、クライアントや第三者に改ざんされてしまうとまずいので、トークンは署名がなされており、クライアントや第三者の改ざんが困難になっている。

サーバが認証を状態として持たないため、ログアウトはアクセストークンをクライアントで捨てるだけになる。アクセストークンを無効化することはできない。アクセストークンが無効化できないということは、アクセストークンが流出したら悪意あるユーザーがサーバにアクセスできるということである。この対策にはアクセストークンの有効期間を短くすることが挙げられる。

uml diagram

参考リンク