スマホネイティブ時代のログインUXを考える
最近の若い世代はパスワードを打ち込むことに全く慣れていなくて、facebookなんかのパスワードも覚えてないらしい。 というのは、スマホならアプリは常時ログイン状態だし、うまく作りこんであるサービスなら別アプリでログインする際もfacebookアプリが一度立ち上がって、すぐに戻ってくる。これでfacebookログインが完了するというわけ。だからメールアドレスを打ち込んで、パスワードを打ち込んで会員登録・ログインなんていうUXはかなり古い。
というわけで、最近はネイティブアプリの場合起動時に端末ユーザIDを付与して、サーバサイドでは通常のユーザ同様に扱ってしまうケースが多いと思う。この場合困るのはこういったメアド・パスワードを持っていないユーザに対して別機種やブラウザからのログインをどうやって許可するかという方法である。
本記事ではパスワードフリーかつ安全なセッション引き継ぎ方法を考察してみる。
モンスターストライク
Googleアカウントで引き継いでいる。これはGoogleアカウントを持っているならもっともカンタンで安全なセッション移行方法だろう。
パズドラ
AndroidはGoogleアカウントで、iOSはユーザIDと機種変コード(期限付き)を発行している。 IDがなんなのかよくわからないけど、そのあとにゲーム内の名前も入力させているので内部のIDでしょう。
LINE(2016年2月以前)
LINEはもともとメールアドレス、パスワードの認証に加えてPINコードという二段階認証。といってもよくある、「別端末でログインされたのでこのPINコードを入力してください」みたいなのが旧端末に届くわけではなく、もともと設定してある暗証番号なので要するにパスワードが1個多いだけ。
ちなみに最近の変更ではいくつかの条件下で、引き継ぎ許可が旧端末で必要になった。
メルカリ
シンプルに、Googleかfacebookでのログインとメール・パスワードのログインを提供。モンストとかと違うのはユーザに認証が必須になっていること。(余談だけどGoogle/Facebookの組み合わせでtwitterがないのはtwitterはメールアドレス取れないから。ちなみにyahooはOAuthであんま見ないけどメール取れるしけっこうユーザいる)
まとめ
以上のようにOAuthを使うか、アプリ内の固有IDにシステムから期限付きパスワードを発行してあげるのが一般的。
ちなみにセキュリティに詳しいわけではないので間違ったことかもしれないが、私の考える簡易的かつ安全な実装はこんな感じ。
①アプリからセッション発行する際にtouch idを使う ②アプリで6桁くらいの数字を発行。期限は60秒 ③ブラウザで6桁の数字を入力してログインボタンを押す ④アプリに許可/不許可の選択をさせる
これならスマホで文字を打つこともないし、入力もたかだか6桁なのでカンタンだと思う。期限60秒なら6桁でもかぶることはないだろうし(1分以内にこの機能を100万人が使うことはない)。
ランダムでアタックを常にされて4のステップまでまともにたどり着かないことも考えられるので、それなら②をもっと複雑に。ユーザIDを出すとか。