ログイン状態は、サーバー側に保存するか、トークンの中に含めるか
セッションでは、サーバーがログイン状態そのものを保存領域に保存します。サーバーは、セッションidをキーにして探せるようにし、クライアントはそのidだけを、たとえばクッキーに保管します。
トークン、たとえば署名付きのJWTは、ログイン状態そのものをトークンの中に含んでいます。署名を検証できるサーバーは、何も問い合わせなくても、そのトークンを信用できます。
リクエストが複数のサーバーに分散されるとき、セッションidは、すべてのサーバーが同じ保存領域にアクセスできなければ使えません。トークンは、署名を検証できさえすれば、他に何も共有する必要がありません。
失効の速さにも、違いが出ます。セッションは、サーバーが記録を消せば、すぐに使えなくなります。一方、長い有効期限で発行したトークンは、期限が来るまで有効なままなので、失効させるには、サーバー側に別の仕組みが要ります。
この課の目標
セッションとトークンの違いを、状態がどこにあるかという観点で説明できる。複数サーバーへのスケール時にその違いがどう現れるかを説明できる。
サーバーを1台から3台に増やし、リクエストがどのサーバーにも届くようになった。ただし、3台はセッションの保存領域を共有していない。変更なしで、どのサーバーでもログイン状態を確認できる方式はどちら?