カテゴリー
未分類

ユーザーログインに関して

昨日、弊社でサービスを提供しているお客様から、「ユーザがログインできなくて困っている。至急確認お願いします」という連絡が来ました。詳しく聞いてみると、「○○@gmail.comというユーザが、ログインできないようです。パスワードは○○○らしいのですが、僕もログイン試してみましたが、できません。至急確認お願いします」というもの。また、「今後、こういった場合にすぐに対応できるように、ユーザのパスワードを管理画面で見えるようにしてもらえますか?」とお願いされました。

原因をたどって、システムのログを見てみると、単純にユーザがメールアドレスを間違って入力していた、というものでした。僕も、自分が作ったシステムに不備があったのか、とヒヤリとしましたが、良かったです。

とはいうものの、ユーザログインというのは、非常にハードルが高い部分だと思います。現在スタンダードな方法として

1)新規登録ユーザはID(メールアドレス)とパスワードを入力
2)確認用メールがメールに届く
3)届いたメールのリンクをクリックして、ログイン完了
4)一度ログインした端末からは、しばらくの間、パスワード入力は不要

といった動作が一般的なように思います。ただしここには、「確認用メールが迷惑メールに分類されて見られない」「パスワードやメールアドレスを誤入力してしまう」といったハードルがあって、それを超えられる人でないとユーザ登録にたどりつけません。ITスキルのある方や若い方には、特に難しくない動作ですが、ここでつまずくユーザは少なくなく、そのせいでユーザをサービスに導くことができないことが多々あります。

それもあって弊社では最近、パスワード入力無しでもログインできる、というシステムを推奨しています。これは、毎回ログインのために、確認メールを送信するやり方です。ユーザにとっては、新しいデバイスからログインする時には確認メールを受信する手間がかかるのですが、それさえ我慢すれば、パスワードを記憶する必要がなく、十分にセキュアなログイン方法だと思っています。それでお客さんにもお勧めさせていただいています。

ただしこれも「2)確認用メールが迷惑メールフォルダに入る」の問題は決して無くなりません。開始したばかりのサービスだと、ドメインがあまり認知されていないこともあり、多くの場合が迷惑メールに分類されてしまいます。サーバの設定を改善することで、ある程度は回避できるのですが、こればかりはシステムでできることには限界があります。

代替え案として、電話番号で認証するシステムも、あります。メールアドレスの代わりに、ユーザの携帯電話番号を使ってログインしてもらう仕様です。これはショートメッセージに確認コードを送ることになり、迷惑メールになってしまうリスクを回避できます。こちらのデメリットとしては、

○SMSの送信にはお金がかかる(少額ですが)
○一人のユーザがいくつものアカウントを作ることができない(これはサービス提供側としては、複数アカウントを持って利用してほしくないことの方が多いのですが、ユーザによってはマイナスに感じる場合もあるようです)

などがあります。確認メールが迷惑メールに入るリスクを考えれば、これらのデメリットがあったとしても、電話番号認証を弊社としてはお勧めしたいところではあります。ですが、お客様的には、なじみ深いメールアドレス認証を好まれる方が多いです。

顔認証、指紋認証、ラインなどを利用した認証サービスもありますが、いずれもセキュリティ・ユーザビリティの点で、問題が無いわけではなく、どの認証方法も一長一短、といったところです。ユーザ認証は、たくさんのアプリケーションで使用されていますが、いまだに、最善の方法が確立できていない部分でもありますね。

あと、上記のクライアントさんから要望のあった「ユーザのパスワードを、管理画面で見えるようにして欲しい」という要望ですが、弊社ではお断りさせていただきました。

確かに、管理する側からすれば、ユーザの情報を知りたいのは当然なのですが、それではあまりにもセキュリティ対策が甘すぎると思います。そもそも、弊社のサービスでは(というか、世の中のすべてのサービスでは)ユーザのパスワードは暗号化しているので、私たちエンジニアでさえ、見ることはできません。そればかりか弊社では、ユーザのメールアドレス、名前などのデータも、基本的にはエンコードして保存するので、たとえ誰かがデータベースを覗き見ることができたとしても、専用のコードなしには、人が読める状態になっていません。

そこまでやっても、時としてセキュリティホールというのは見つかりますので、難しい問題です。ユーザのデータは、管理者としては、あるだけ見たいものですが、弊社ではある程度のフィルターをかけるようにして、必要な時に必要な情報だけ見られるようにするのが、重用だと考えています。

また、上記のクライアントさんの場合、ユーザとやりとりして、ユーザのパスワードを聞き出したようなのですが、それも、本来はタブーではないかと感じて、システムを作っている側からすると冷や汗が出ました。カスタマーサポートから「パスワードを教えてください」と聞かれても、決して教えてはいけません。そもそも、パスワードを教えることによって、管理側がログインできてしまうシステムでは脆弱すぎるのです。

先日、ツイッターの社員には、どのユーザにもなりきれる「神のアカウント」というのが存在する、というニュースが出回って話題になりました。ツイッターほどの巨大なシステムでさえ、そんな単純なセキュリティホールを作ってしまうのです。スモールスケールのシステム開発においても、セキュリティは、真摯に取り組まないといけない部分だと考えます。