私のSpringアプリケーションでは、ユーザーのメールアドレスに「マジックサインインリンク」を送信して、認証プロセスからパスワードを削除することを計画していました。ただし、 この質問 Rob Winch(Spring Securityのリーダー)は次のように述べています。
メール内のリンクからのログインを許可するという意味で、自分が何をしているのかを知っていることに注意してください。 SMTPは安全なプロトコルではないため、通常、認証の形式として電子メールを持っている人に依存するのはよくありません。
それは本当ですか?もしそうなら、パスワードをリセットするためのリンクを送ることはどのようにもっと安全ですか?マジックリンクを使用したログインは、パスワードをリセットするためのマジックリンクを送信することと同じではありませんか?
魔法のリンクだけでは必ずしも悪いわけではありません。 512ビットの完全にランダムな値は、512ビットの秘密鍵よりも簡単に推測できます。一般に、妥当な期間が経過した後は期限切れにすることをお勧めします。良い方法-データベースエントリを保存する必要もないのは、トークンデータをURLに埋め込み、秘密鍵で署名することです。つまり.
site.com/login?type=login&user=[username]&expires=[datetime]&sig=[signature of other parameters].
ただし、送信メカニズムとしてのメールは安全ではありません。
デフォルトでは、SMTPは傍受に対する保護をほとんど提供していません。トラフィックはサーバー間で暗号化される場合がありますが、保証はありません。暗号化を使用していても、接続の途中で実行できることがよくあります(暗号化は認証と同じではありません)。
もしそうなら、パスワードをリセットするためのリンクを送ることはどのようにもっと安全ですか?
そうではありません。これが、いくつかのサービスがリンクを送信する前(またはリンクをクリックした後)に追加の証拠を要求する理由です。
ここには3つの問題があります。
Ifメールで秘密のログイントークンを使用してリンクを送信する場合、リンクは使い捨てで、すぐに期限切れになります。