認証におけるRemember Meの仕組み
Remember Me とは
Remember Meはアカウント認証によくある機能の一つで、ユーザがサービスにログインしたときユーザの入力したアカウント情報をサーバ側で保持しておく機能です。
Remember Me を有効にすることで、ユーザはサービスへのアクセスを一旦終了した場合でも、
再度サービスに接続したときにログイン状態を維持することが可能です。
Remember Me の仕組み
Remember Me 機能を提供する方法の一つに、クッキーを二つ使うものがあります。
この方法では、クライアントがアカウント認証をパスしたとき、サーバがそのクライアントに対して以下の二つのクッキーを発行します。
通常のクッキー
通常のWebサービスと同様に発行されるクッキーです。このクッキーには、通常Expired属性が付加されません。すなわち、ブラウザを閉じた瞬間にこのクッキーは破棄されます。Remember Me 用クッキー
Remember Me 専用のクッキーです。このクッキーのExpired属性には100000日などの半永久的な期間が設定されます。
クッキーの属性定義はこちら。
Remember Me を設定したユーザアカウントがログインに成功した時、サーバはDBに保持するユーザレコードのRemember Meフラグに該当する属性をtrueにします。当該フラグがtrueのユーザから再度アクセスがあったとき、サーバはクライアントのRemember Me 用クッキーを参照します。
Remember Me 用クッキーは半永久的にクライアントに保持されているので、サーバはRemember Me 用クッキー内のセッションIDを参照でき、ユーザがログイン状態でサービスを利用することを許可することができます。
上記手法におけるRemeber Me の懸念点
この手法で実装したRemember Me 機能によって、クライアント側には半永久的なクッキーが残留してしまいます。
そもそも、クッキーというものはセッションIDの漏洩とそれによるセッションハイジャックを防ぐために、Expired属性が設定されず、ブラウザが閉じたときに自動的に破棄され、サーバから再発行されるのが一般的です。
そのため、Remember Meの実装はサービスの内容・セキュリティ要件等を鑑みた上で実装するのが良さそうです。(Remember Me 用クッキーの残留期間を調節して、数日程度で破棄させるというやり方もあります)