構築しているASP.NETMVCサイトに「RememberMe」ログイン機能を実装しようとしています。私はこのアプローチhttp://jaspan.com/improved_persistent_login_cookie_best_practice(上部の「ミラーの設計」を参照)を使用して、ある程度機能させようとしています。
したがって、ワークフローは次のようになります。
- ユーザーがログインすると、暗号化された安全なランダム文字列とデータベースIDが永続的なCookieとして発行されます(約30日間有効)。安全な文字列は、データベースのユーザーアカウントレコードの横に保存されます。
- ユーザーは後でサイトに戻り、ブラウザがログインCookieを提示し、IDとセキュアキーがデータベースで検索され、一致するものが見つかった場合、ユーザーは自動的に認証されます。
- 認証されると、新しいセキュアキーが生成され、データベースに保存され、新しいCookieが発行されます。
私はこれを正常に機能させていますが、ユーザーが複数のブラウザーまたはコンピューターからログインした場合はうまく機能しません。明らかに、ブラウザが異なれば、Cookieとして保存される安全なキーも異なるため、ワークフローは次のようになります。
- ユーザーはブラウザAからログインし、Cookieとして安全なキーを発行され、キーはデータベースに保存されます。
- ユーザーはブラウザBからログインし、Cookieとして別の安全なキーが発行されます。キーもデータベースに保存されますが、ブラウザAから生成されたキーを上書きします。
- ユーザーがブラウザAからサイトに再度アクセスすると、ブラウザは手順1で発行されたCookieを表示しますが、手順2で安全なキーが置き換えられたため、一致しなくなったため、ユーザーは再度ログインする必要があります。別の新しいキーが生成され、ブラウザBに発行されたキーを上書きします。
- ユーザーがブラウザBから再度アクセスした場合、キーが一致しない場合、再度ログインする必要がある場合など。
どうすればこれを解決できますか?データベースに複数のキーを保存して維持する必要がありますか?私もこれを正しい方法で行っていますか?StackOverflowがこれを管理しているようで、さまざまなブラウザやコンピュータから私を覚えていることに気づきました。