ユーザーはパスワードを忘れてしまい、(ほぼ) すべてのメンバーシップ サイトには、ユーザーが再びログインできるようにする方法が必要です。
一般的なシナリオを実装したいと思います:
- ユーザーがサイトにアクセスし、ログインしようとしてログインできず、パスワードを忘れたことに気付きました。
- ユーザーがメールアドレスを入力し、「パスワードを忘れた」をクリックします
- ユーザーは、パスワード リセット リンクが記載された電子メールを受け取ります
これを実装する方法を次に示します (C#/ASP.NET MVC):
- ユーザーが電子メールを入力して「パスワードを忘れた」ボタンを押すと、私のサイトは GUID を生成し、それをメンバーのエンティティの DB (
member.ResetToken
) に保存し、URL にその GUID を含むリンクを電子メールで送信します (送信された電子メールは、このリンクは 1 回のみ使用できます) member.ResetToken
ユーザーがリンクをクリックすると、サイトはその URLに基づいて自分のアカウントを検索します。アカウントが見つかった場合は、パスワード リセット フォームを提示し、リセットが完了するとmember.ResetToken
、アカウントから がクリアされます。
これが私の質問です: このままにしておくか (現在または将来いつでもそのリンクでパスワードをリセットできます)、またはタイムスタンプを追加して、パスワードをリセットする必要がある期間を制限しますか?
UX の観点からは、準備ができたらいつでもパスワードをリセットできることは素晴らしいことですが、これによって発生する可能性のあるセキュリティ上の問題を見落としていないことを確認したいと思います。