この記事のモチベーション
mixi2のユーザー認証がなぜああいうフローなのか有識者にコメントもらいたく、まとめてみる。
招待のみで参加可能なmixi2ですが、招待ありきでのユーザー登録フローなので慣れない感じがしつつも登録し、ふと何かのタイミングでセッションが切れて再ログインしたとき、ちょっと変わった認証フローだなぁと感じた次第。
特に、ユーザーとして存在しないメールアドレスをsubmitしたときのフローが見慣れない感じでした。
認証成功
まず、認証が成功するパターンから。
パスワードレス方式(?)
私が知らないだけかもですが、こういうパスワードレスってほかのサービスでもありますか?パスキーや生体認証でなく、メールアドレスを使ったパスワードレス。
確かに、パスワード無くすだけでいろいろメリットはある気がします。
- サービス側はユーザー+パスワードの組を保持しなくて済む。
- 攻撃者のモチベーションが削がれる。普通のフィッシングじゃ突破できなくて、ちょっと工夫が必要。
- ユーザーにとってパスワード使いまわしのリスクが存在しない。
とかでしょうか?(ほかにもあれば教えてください!)
認証失敗(登録してないメールアドレス)
1~3は同じです。
なるほど・・?
失敗パターンは、Step1で入力してる時点で「あれ、これだっけ・・?」と思いながらアドレスを入れてるのですが、認証コードが書かれたメールが普通に届くので、「あ、これであってたか」と一瞬思わせておき、最終的には梯子を外される感じ。
このフローのメリットは?
登録済み/存在しないのいずれでも、認証コードの画面(Step3)に遷移するので、存在するユーザーIDをクローリングされるのは防げるのでそこはメリットですよね。
ですが、ユーザーとして存在しないメールアドレスの場合でも認証コードを送ってくるのはなぜ・・?メールを送らないとか、「メールの本文に存在しないユーザーです」と書くとかでもいいのではと思ってしまう。。
メール発報に至る内部フローも合点がいかない・・
発行した認証コードをユーザーと結び付けて一時的なデータベースなりメモリに保管ができたことを確認してからメール出すのが真っ当じゃないですかね・・?発行した認証コードの結びつけ先が存在しないけどそのままメール発報まで突き進んでいる・・?
ここがあまり合点がいっておらず、何かわかる方いれば教えていただきたいです。
何かご存じの方コメントください
内部の判定ロジックを減らしてシンプルにしてるのかなーというとりあえずの納得を自分の中ではしてるのですが、何かわかる方いたらコメントお待ちしてます!