はじめに
お疲れ様です。プログラミング学習中のくろちゃんです。
本日は私が認証機能をどうしたらいいか迷っている時に、受講中のオンラインスクールの校長がこんなのもあるよと教えてくださったMagic Link についてまとめていきます。
Magic Link とは
パスワードレスログインの一形態です。
一般的なメールアドレス+パスワードとは違いメールアドレスのみで認証します。
仕組み
Magic Linkは以下の仕組みで動いています。
1.ユーザーがメールアドレスを入力
2.サーバーが一度きり有効なトークン付きURLを生成
3.そのURLをメールで送信
4.URLをユーザーがクリック
5.トークンを検証してログイン完了
メリット
- UXが良い
パスワードの入力が不要なため、パスワードを忘れたり間違えることがなくなりログイン離脱が減りやすいです - パスワード管理が不要
ハッシュ化、パスワードリセット、強度のルールなどを丸々度外視することができます - プルートフォース攻撃に強い
パスワードが存在しないため総当たり攻撃が成立しなくなります。
デメリット
* メールが届かないと何もできない
遅延やメールサーバー障害等が起こるとログイン不能となってしまいます
- メールアカウント依存
メールが乗っ取られたら終了です
2段階認証がないメールは危険です - URL漏洩リスク
リンク=鍵となるので扱いがシビアになります - 頻繁なログインに向かない
毎回メールを確認してURLを踏むのは面倒です
よくある設計のルール
- トークンは一回限り
- 有効期限は数分〜15分値度
- 使用後は無効化する
- ログイン完了後にセッション発行
まとめ
Magic Linkはパスワードが引き起こす問題を捨てるための仕組みです。
実装自体もパスワード系を排除するため楽にはなりますが、毎度メールを確認しないといけないなどユーザー目線で不便なこともあります。
メリットデメリットを考えた上で作成しているアプリケーションにあった認証を選択するのが大切です。