セッションベース認証とトークンベース認証
セッションベース認証
セッションベース認証はセッションと呼ばれる情報をサーバーに保存し、クライアントのログイン状態を保持する認証方式。
サーバーはセッションを保持する。セッションにはセッション ID とユーザ ID、ロール、有効期限などの情報が含まれる。
クライアントはセッション ID を保持する。
セッションベース認証は後述するトークンベース認証と比べてセッションをサーバーのメモリやデータベースに保存するためスケーラビリティが低いという欠点があるが、一方でサーバーがヤバいと思ったらいつでもサーバー側でセッションを破棄できるという利点もある。
トークンベース認証
トークンベース認証はトークンを使って認証する。
トークンは自身にユーザ ID、ロール、有効期限を持つ。つまり認証に必要な情報すべてである。
トークンはセッションと同様にサーバーで生成されるが、セッションと異なりサーバーで保管しない。トークンはクライアントに持たせる。
クライアントがリクエストするときは併せてトークンを送り、サーバーはトークンを確認することでレスポンスする。
クライアントでトークンを保持することから、クライアントや第三者に改ざんされてしまうとまずいので、トークンは署名がなされており、クライアントや第三者の改ざんが困難になっている。
サーバが認証を状態として持たないため、ログアウトはアクセストークンをクライアントで捨てるだけになる。アクセストークンを無効化することはできない。アクセストークンが無効化できないということは、アクセストークンが流出したら悪意あるユーザーがサーバにアクセスできるということである。この対策にはアクセストークンの有効期間を短くすることが挙げられる。