認証とアイデンティティの今

この記事は Modern Authentication and Identity: Where Are We Today? の抄訳です。

アプリケーションの認証といえば、多くの人はユーザ名(またはメールアドレス)とパスワードを入力する、例の「ログイン画面」を思い浮かべるでしょう。この方法はあまりにも多くのアプリケーションで利用されているため、「今さら認証について話すことなんてあるのか」と思われるかもしれませんが、認証について本当に理解されているのでしょうか?もっと良い認証方法はないのでしょうか?そして、私たちが信頼を寄せるユーザ名とパスワード無しでは認証ができないのでしょうか?今どきの認証とアイデンティティの世界には、普段よく目にするものよりも優れた方法があります。今回は、「認証とアイデンティティの今」を見ていきます。

ユーザ名/パスワード方式をはるかに超える今どきの認証

ユーザ名/パスワード方式による認証は、多くのアプリケーションで利用されているので既に感覚が麻痺しているかもしれませんが、強度の高いパスワードを生成してそれを記憶しておくことは非常に苦痛なことです。パスワードマネージャのようなツールを使うことで多少は改善されるかもしれませんが、こういったツールを利用すること自体に苦痛を感じるユーザもいるのではないでしょうか。そして、パスワードを忘れないよう強度の低いパスワードを複数のアプリケーションで使いまわしてしまうといった、セキュリティに穴を開ける恥ずべき行為をしてしまいます。

ユーザはログイン時には便利さを求めます。もし、ユーザ名とパスワードを入力しなくて済むのであれば便利だと思いませんか?これを実現する今どきの認証方法を3つご紹介します。

ソーシャルログイン

よく見かけるかと思いますが、多くのアプリケーションはGoogle、Facebook、Twitterなどのアカウントでログインできるようになっています。この方法の優れている所は、いずれかのアカウントを持っていれば、ボタンをクリックするだけでアプリケーションにログインできる点です。

ソーシャルログイン

ソーシャルログインはOAuthプロトコルによって実現されています。OAuthはアクセストークンにより、SNSなどの第三者にアプリケーションの代わりに認証をさせます。

ソーシャルログインは、ユーザにとって便利なだけでなく、アプリケーション提供側にもメリットがあります。それは質の高いユーザデータです。SNSユーザの多くは、自分が参加するイベントや、購入した商品、好きな本などの情報をSNSで共有することを好みます。そのユーザが許可を与えさえすれば、これらの情報をアプリケーション側で取得できるのです。この方法に同意できるかどうかは別として、ソーシャルデータを利用したターゲットマーケティングは多くの企業で利用され、うまくいっています。

パスワードレス認証

パスワード無しでアプリケーションにログインできるでしょうか?できます!Slackのようなアプリケーションはユーザ名/パスワード方式の他に、非常に便利なパスワードレス方式を提供しています。ユーザは「マジックリンク」を含むメールをアプリケーションから送信させることで、この機能が利用できるようになります。短い有効期限が設定されたこのリンクには、ログインするユーザに関連するコードが含まれており、リンクをクリックするとアプリケーションはコードを検証し、ユーザを認証します。ここでのポイントは、ユーザがメールプロバイダに既に認証されているという事実により成り立っている(既存のセキュリティの仕組みを利用している)ということです。

パスワードレス認証を実現する方法は「マジックリンク」を利用する方法の他にもあります。例えば、テキストメッセージ経由でワンタイムパスワードを送信したり、モバイル端末による指紋認証などの方法で実現する場合もあります。

シングルサインオン

所属している組織で多数のアプリケーションを利用している場合、それぞれで認証するのは面倒に感じるかもしれません。これを解決する方法としてシングルサインオンがあります。この方法では、中央の認証サーバで1度認証を通過すれば、シングルサインオンに対応しているアプリケーションは利用を許可します。この仕組みにはクッキーが利用されています。つまり、シングルサインオンを利用するアプリケーションにログインを試みると、中央サーバにリダイレクトされ、クッキーがチェックされます。チェックを通過すると認証トークンとともにアプリケーションに戻されます。

最も有名な例はGoogleです。GmailやInboxにログインしておくと、例えばGoogle Analyticsなどの他のシングルサインオンが有効化されたアプリケーションにアクセスするだけで自動的に認証されます。

シングルサインオンは多くの組織で利便性と高いセキュリティを提供するために利用されています。

企業が望む「より良いセキュリティ環境」

ここまで、エンドユーザに焦点を当ててきましたが、企業にとっても利便性の高い環境を提供し続けるのにソーシャルログインやパスワードレス認証などの方法は欠かせないものになっています。一方、セキュリティは非常に頭の痛い問題です。ある記事によると、(驚くに値しない数値かもしれませんが)3万ものWebサイトが毎日ハッキングされ続けています。パスワードが平文で保存され、パスワード強度を強制する機能もないような古いアプリケーションでは、こういったセキュリティ問題で苦労しています。

こういった中、セキュリティについて懸念している企業は、多要素認証を導入し始めています(理想的にはすべての企業に導入してほしいものですが)。この機能は現在Google、Facebook、Twitterなど多くの一般的なアプリケーションで利用できます。

多要素認証の最も一般的な実装はテキストメッセージを通じて行う方法かもしれません。この場合、ユーザはアプリケーションにあらかじめ携帯電話の番号を登録しておきます。ログインを試みた際、アプリケーションはこの電話番号に対してテキストメッセージ経由でコードを送信し、ユーザはログインの第二段階でコードを入力します。この方法が優れているのは、一般的にユーザは携帯電話をパスワードロックしていることが期待できるため、よりセキュリティを高めることができるという点です。

他の一般的な方法としてGoogle Authenticatorを利用する方法があります。この場合、次のようなフローになります:

  • あらかじめユーザはアプリケーションにログインしておきます
  • ユーザの携帯電話にインストールしてあるGoogle Authenticatorアプリで、アプリケーションが表示するQRコードを読み取ります(以上が初期設定です)
  • 以降、Google Authenticatorは短い間隔で6桁のランダムなコードを生成し続けます
  • 実際のログイン時には、アプリケーションにこのコードを入力するとアクセスが許可されます

これらの機能が全て実装されていたら?

ここまででご紹介した方法はユーザの利便性確保とアプリケーションのセキュリティレベルを向上させる素晴らしい機能ですが、実装にはコストがかかります。スクラッチから開発すると、時間がかかり、エラーが発生し、車輪の再発明になりかねません。残念ながらこういった事情から、これらの素晴らしい仕組みは採用されず、昔ながらのユーザ名/パスワード方式が利用され続けています。ソーシャル認証と同じようなことを行うオープンソースライブラリも存在しますが、実際のところ、全てを期待通りに動作させるためには解決しなくてはいけない課題が存在します。

Auth0はこういった問題を簡単に解決します。Auth0を利用すると、上述の機能の他にも様々な機能を利用でき、設定1つで切り替えることもできます。Auth0を利用すると次のようなことが可能になります:

お好みのソーシャルアイデンティティプロバイダを追加できます

お好みのソーシャルアイデンティティプロバイダを追加できます

多要素認証を簡単に追加できます

多要素認証を簡単に追加できます

パスワードレスログインとシングルサインオンを有効化できます

パスワードレスログインとシングルサインオンを有効化できます

洗練されたログイン画面を利用できます

洗練されたログイン画面を利用できます

また、Auth0は強力なルールパイプライン機能(JavaScriptでカスタマイズ可能)を提供します。ユーザプロファイルに任意のデータ(ロールやアクセスレベルの制限などに利用可能)を追加するルールを作成できます。また、時間とともにユーザ情報を徐々に構築するprogressive profilingという機能も利用できます。

Auth0でSendGridを利用する

アプリケーションでユーザをガイドするためにメールの送信機能が必要になります。例えば、ユーザがサインアップした際のアカウント確認時にメール送信する、などのケースです。

Auth0でもメールを送信できますが、SendGridをメール送信プロバイダとして利用することもできます。その方法をご紹介します:

Step 0:Auth0にサインアップする

アカウントをお持ちでない場合、Auth0にサインアップを行い無料のアカウントを作成します。

Step 1:SendGridにサインアップする

SendGridにサインアップを行いログインします。(Microsoft Azureサブスクリプションをお持ちの場合、Azure Marketplaceからフリーアカウントを取得できます)そして、API Keys画面で「Mail Send」パーミッションを持ったAPIキーを作成します。

Step 2:メールプロバイダとしてSendGridを有効化する

Auth0のダッシュボードでCustom Email Providerページを表示します。「Use my own Email Provider」の設定を変更してSendGridロゴを選択します。

メールプロバイダとしてSendGridを有効化する

注:Auth0ダッシュボードのCustom Email Providerページ上の「SEND TEST EMAIL」ボタンを利用するとテストメールを送信できます。数分経ってもメールを受信できない場合、Logsでエラーが発生していないか確認してください。

Step 3:SendGridアカウントの確認

SendGridのActivityページには送信されたメールの配信状況が表示されています。

Activity

Step 4:完了

以上でAuth0のメールプロバイダをSendGridに設定できました。

まとめ

今回の記事では、単なるユーザ名/パスワード方式を越えた、よりセキュアな認証方法をみてきました。いずれも利便性が高いというメリットがあります。実現手段として、ソーシャルログインや、パスワードレス認証、シングルサインオン、多要素認証などがあります。これらの機能をスクラッチから開発するのは難しい場合がありますが、Auth0により簡単に利用できます。実際Auth0を利用すると、アプリケーションの認証設定が10分以下で完了する場合もあります。また、次のような太っ腹なFreeプランもご用意しています。

  • 7,000アクティブユーザまで利用可能
  • ソーシャルログイン(2つまで)
  • プロダクション利用可能

今すぐAuth0にサインアップしてドキュメントをチェックしてみましょう!