15

パスワードの回復は、これまでやったことがなかったので、非常に困難でした。

これまでのところ、次のWebアプリがあります。

パスワードが適切にハッシュされ、ユーザー ロールが実装され、正しく機能する Spring Security。

この戦略は、stackoverflow からの研究を示唆しています。

  1. ユーザーがパスワードを忘れた場合のボタンを押して、メール アドレスを入力します。
  2. 動的リンクがメールアドレスに送信されます
  3. ユーザーがメールアドレスのリンクを開く
  4. 彼をパスワードリセットページにリダイレクトします

不明なこと:

  • リンクに動的な性質を与える方法 - 世代の方法
  • リンクにタイムアウトがあります - ここでいくつかの質問が見つかりましたが、多くの場合、カスタム ハンドラーまたはスプリング セキュリティ機能の拡張が必要です
  • そのような動的リンクに応答するリクエスト マッピング メソッド
  • 一時的なリンクの保存方法 - データベース、セッションなど?

ご覧のとおり、リストは 1 つの質問に対して非常に厳しいものです。そのため、ステップバイステップでそれを行う方法のガイドリソースを提供できることを望んでいました. Spring Security のドキュメントでこれに関する情報をあまり見つけることができなかったことに少し驚きました。ありがとう。

私は学生なので、特にJavaのコンテキストでそうするための業界のベストプラクティスを本当に知らないので、誰かが助けてくれることを本当に願っています.

4

2 に答える 2

19

この問題は、Spring Security とはあまり関係がありません。ユーザー データベースの構造と使用されているパスワード エンコーダーを理解していれば、実際には、データ アクセス、Web コントローラー、および電子メールの送信を含むワークフローを実装するだけです。リンクには、ランダムなトークン文字列が含まれている必要があります (使用SecureRandomおよびbase64エンコーダーなど)、userIdとタイムスタンプ(リンクが有効なウィンドウを検証するため)とともにデータベースに保存する必要があります。コントローラーは、着信要求からトークンを抽出し、トークンを使用してデータベースからデータをロードするだけです。タイムスタンプを確認し、ユーザーをパスワード入力フォームに転送します。要件によっては、他のセキュリティの質問にも答えてもらいたい場合があります。次に、パスワードを検証してエンコードし、リセット リンク テーブルに格納されている userId と一致するアカウントに格納します。期限切れのリンクをデータベースから削除するためにバッチ ジョブを実行することも理にかなっています。

Grails Spring Security UI プラグインには、パスワードを忘れた場合のオプションが既にあり、直接使用するか、参照として使用できます。

于 2013-06-21T15:10:14.693 に答える
5

このユースケースのために Java プロジェクトを実装しました。GitHub、オープンソースにあります。

すべての説明があります(何かが欠けている場合はお知らせください...)


ご覧ください: https://github.com/OhadR/Authentication-Flows

これは、auth-flows を使用するクライアント Web アプリで、README にすべての説明が含まれています。実装を指示します: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows

于 2013-11-29T12:41:21.557 に答える