0

Spring アプリケーションに 2 要素認証を実装しようとしています。

望ましい状況

ユーザーに最初にユーザー名とパスワードを使用してログインしてもらいたいのですが、それらが正しい場合は、システムにランダムキーを生成させ、それをユーザーにメールで送信してもらいます。その後、システムは、トークンを入力してシス​​テムにログインするだけでよいページにユーザーをリダイレクトする必要があります。

これまでに得たもの (疑似コード)

ユーザーが login.jsp ページに入ります。ユーザー名/パスワードでログインすると、システムは CustomMade AuthenticationException を送信します。AuthenticationFailureHandler では、例外に対して getAuthentication を実行します (非推奨であることは承知しています)。ただし、ユーザー名を使用してユーザーにトークンを送信します。その後、( request.getSession().setAttribute を使用して) セッションに例外を配置し、最後にシステムが login.jsp をリロードします。

Login.jsp はセッションで例外を確認し、トークン入力フィールドを表示します。ユーザーはトークン入力フィールドに入力してログインします。システムは、セッションの資格情報と指定されたトークンを使用してユーザーを認証します。

質問

ユーザー名/パスワードをセッションに保存するのは悪い習慣だと思います。私が考えた2つの可能な解決策:

  1. ユーザー名/パスワードを確認した後。ユーザー名を静的変数または DB に保存します。ユーザーがトークンを入力しているときに、ユーザー名が変数/db にあるかどうかを確認し、トークンを確認します。トークンが正しい場合は、ユーザーでログインします。

  2. ユーザー名/パスワードを確認した後、低い役割でユーザーをログインさせます。低い役割では、ユーザーはトークン ページにしか移動できません。有効なトークンを入力すると、システムはユーザーに新しい権限を与えます。

実装するのに最適なソリューションは何ですか?

4

0 に答える 0