見出し画像

パスワードレス認証導入その後

ころちゃんです。本記事は Digital Identity技術勉強会 #iddance Advent Calendar 2020 21日目の記事になります。開発ブログも兼ねています。

19日目の猫氏の記事でも引用してもらっていますが、今年はbosyuにメールアドレスログイン機能を追加したので、今年のうちに、書ける範囲で、振り返りしておきたいなと思い、アドカレに乗っかりました。

生体認証の仕組みの話を書こうと思いましたが、ネトゲの拡張がリリースされてしまい進捗が無になっているので断念。

前提

・リリース時点で出した記事はこちら
・導入前: Twitter, Facebook によるSNSログイン
・導入後: 上記 + メールアドレスログイン
・Email OTP(One-Time-Password)の話で、FIDOの話ではない
・要求としては「SNSとは切り離された何かで認証したい」

メアドログイン自体は必要だったか

導入してよかったと思っている。

個人で使っているSNSと連携させたくないユーザ層が一定数存在しているのは認識していたし、企業として使う場合に会社用のSNSアカウントを取得しなくてはいけないのは登録までのハードルが高い。このあたりが解決できた。

結果的に、新規登録者の半分近くはメールアドレスで登録するようになっているのが現状。初期リリースでSNSログインのみのサービスはたくさん見かけるが、ユーザー拡大のためにどこかで開発する必要がありそうだよね、と思って見ている。

パスワードレスにしたモチベ

パスワードを再利用するインターネットユーザーが8割以上いる現状では、サービス提供側としては、パスワードが再利用される前提で考える必要がある

自社で管理しているパスワードを漏らすのは当然アウトなんだが、他サービスで大規模流出があった場合に不正アクセスされる可能性があり、対象のユーザー以外にも害が及ぶ(サービス内のコミュニティ全体に悪い影響が出る)かもしれない。というところまで視野が及んでいる運営者がどれぐらいいるのだろうか。

サービス提供側にはサービス内の全てのユーザーを守る責務があると思う。

多くのサービスがパスワードの使いまわしを啓蒙しているが、啓蒙には限界があると感じているので、強制的に使わせない状態にしてしまうほうがいい。

とにかく自社サーバー内にパスワードを入れたくないという気持ちを強く持った。特に、今までパスワードを利用しないで運用していたのに、あとから追加するのはナンセンスだなと思った。

問い合わせ

社内でユーザーサポート体制が確立されていたこともあり、あまり不安ではなかった。サポートチームが優秀なので頭が上がらない。結果的だが、件数も予想よりも多くないと感じた。

その中でも多かったのは以下

・ログインメールが届いてない
・無効なリンクを踏み続けてログインできない

前者は要因が複数考えられて結構調査が辛い。後者はGmailなんかだとメールが自動でスレッド形式になるので、どれが新着なのか分からなくなってるケースが多かった。

また、メールアドレスを気軽に変えてしまい、ログインできなくなっているユーザーも稀にいた。アカウントリカバリーやKYC周りはもうちょっと楽にしたい。

メール送信への依存

前述したが、Email OTPだとメールの関連のトラブルがきつい。すべてメール送信に依存することになるため、メールの信頼性を担保しなきゃいけないのが大変になる。

一般的なサービスであれば新規登録が死ぬだけだが、我々の場合はログインも死ぬことになる。インパクトがでかい。

サービスにSLAが設定できていない状況でも、配信系統を分けて冗長化したり、優先度設定はやったほうがいい。そして、改善するにしても、まずは計測から。

デバイスの考慮が面倒

基本的なPC版のフローとしては、Emailでmagiclinkを送信し、メール内に埋め込まれたURLをクリックで認証完了する。モバイルでは認証コードを使用する。

モバイルのOSによっては、URLをクリックしたタイミングで開くブラウザをコントロールできず、常用してるブラウザと異なるブラウザでしかログインできず詰むケースがあったので、分けた。

ここは割り切って良かったかもしれないが、OSやブラウザ側のご機嫌次第で死ぬのでなんともいえないし、このへんの挙動を網羅していくのは大変。

今後

直近はbosyu Jobsリリースのため、ロードマップに載ってる機能を最速でリリースしてきた。最近、余力を持たせつつハッカソン的に好きな機能を開発する時間が確保されたので、認証周りの改善を入れていきたいと思います。

どこかでFIDO導入にトライしたいなと思っています。


この記事が気に入ったらサポートをしてみませんか?