メニュー

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

Two-Factor Authentication with Authy, PHP and Laravel

Adding Two-Factor Authentication (2FA) to your web application increases the security of your user's data by requiring something your user has to be present for step-up transactions, log-ins, and other sensitive actions. Multi-factor authentication determines the identity of a user by validating once by logging into the app, and then by validating their mobile device.

This PHP Laravel sample application is an example of a typical login flow using Two-Factor Authentication. To run this sample app yourself, download the code and follow the instructions on GitHub.

第 2 要素については、ユーザーが携帯電話を所有していることを以下のいずれかによって検証します。

  • Sending them a OneTouch push notification to their mobile Authy Client app or
  • モバイル Authy アプリを通じてユーザーにトークンを送信する
  • Sending them a one-time token in a text message.

See how VMware uses Twilio Two-Factor Authentication to secure their enterprise mobility management solution.

ここをクリックしてチュートリアルをはじめましょう!

Authy の設定

If you haven't configured Authy already, now is the time to sign up for Authy. Create your first application naming it as you wish. After you create your application, your "production" API key will be visible on your dashboard

Once we have an Authy API key we can register it as an environment variable.

        
        
        
        
        .env.example

        Authy でユーザーを登録する方法を見てみましょう。

        Register a user using Authy

        ユーザーをAuthyに登録する

        新規 ユーザー がウェブサイトにサインアップしたら、この経路を呼び出します。これにより、新しいユーザーがデータベースに保存され、そのユーザーが Authy に登録されます。

        アプリケーションをセットアップするために Authy が必要とするものは、ユーザーの E メール電話番号、および国コードだけです。二要素認証を実行するには、サインアップの時点でこの情報を必ず求める必要があります。

        ユーザーを Authy に登録すると、authy id が返されます。これは、Authy でユーザーのアイデンティティーを確認する方法となるため、非常に重要です。

              
              
              
              
              app/User.php
              OneTouchでのユーザーのログイン方法を確認する

              Authy OneTouchでログインする

              ユーザーがウェブサイトにログインしようとしたら、第 2 形式の識別をユーザーに求めます。まずは、Authy の OneTouch 検証を見てみましょう。

              OneTouch は以下のように機能します。

              • We attempt to send a User a OneTouch Approval Request.
              • ユーザー の OneTouch が有効になっている場合は、成功メッセージが返されます。
              • ユーザーが Authy アプリで「Approve」を押します。
              • Authy は、approved ステータスを持つアプリに POST リクエストを発行します。
              • ユーザーをログインさせます。
                    
                    
                    
                    
                    app/Http/Controllers/Auth/AuthController.php

                    Authy OneTouchでログインする

                    app/Http/Controllers/Auth/AuthController.php
                    OneTouchリクエストを送信する

                    OneTouchリクエストを送信する

                    ユーザーのログイン時は、ただちにOneTouchによってユーザーの身元の検証を試みます。 ユーザーがOneTouchデバイスを持っていないことが事前に分からない場合は、Authyは段階的なフォールバックを行います。

                    Authy では、メッセージやロゴなど、OneTouch リクエストを使って詳細を入力できます。details['some_detail'] を追加することにより、任意の数の詳細を簡単に送信できます。たとえば、以下のように OneTouch リクエストを送信して送金を承認するシナリオが考えられます。

                    $params = array(
                      'message' => "Request to send money to Jarod's vault",
                      'details[From]' => "Jarod",
                      'details[Amount]' => "1,000,000",
                      'details[Currency]' => "Galleons",
                    )
                    

                    リクエストを送信したら、レスポンスに基づいてユーザーの authy_status を更新する必要があります。

                          
                          
                          
                          
                          app/User.php
                          Configure OneTouch callback

                          OneTouchコールバックを構成する

                          OneTouch リクエストの送信後にユーザーが何を行ったのかをアプリで認識するためには、コールバックエンドポイントを Authy に登録する必要があります。

                          このコールバックでは、AuthyのPOSTリクエストで送信される authy_id を使用してユーザーを見つけます。 この時点では、ウェブソケットを使用して、Authy からレスポンスを受信したことをクライアントに認識させるのが理想的です。しかし、このバージョンでは極力シンプルにしておき、ユーザーのauthy_statusを更新するだけにとどめます。 

                                
                                
                                
                                
                                app/Http/Controllers/Auth/AuthyController.php

                                Authyのコールバックを使用してユーザーを更新する

                                app/Http/Controllers/Auth/AuthyController.php

                                これを処理するクライアントサイドコードを見てみましょう。

                                Handle authentication in the browser

                                二要素をブラウザーで処理する

                                サーバーサイドで何が起こっているのかについてはすでに見てきましたので、次に JavaScript がそれらのサーバーエンドポイントとどのように連係しているのかを見てみましょう。

                                OneTouch レスポンスを予期している場合は、Authy ステータスが空でないことを確認するまでまず /authy/status をポーリングします。このコントローラーを確認し、何が起こっているのかを見てみましょう。

                                      
                                      
                                      
                                      
                                      public/js/sessions.js
                                      Accept or deny Authy status

                                      2FAステップの終了

                                      authy_status承認された場合、ユーザーは保護されているコンテンツにリダイレクトされます。それ以外の場合は、リクエストが拒否されたことを示すメッセージとともにログインフォームを表示します。

                                            
                                            
                                            
                                            
                                            app/Http/Controllers/Auth/AuthyController.php

                                            Redirect user to the correct page based based on authentication status

                                            app/Http/Controllers/Auth/AuthyController.php

                                            これで終わりです! 3 つの異なるメソッドと最新の Authy テクノロジーを使用して二要素認証を実装しました。

                                            関連トピック

                                            関連トピック

                                            Twilio を使う PHP 開発者であれば、他のチュートリアルも調べてみてください。

                                            通話のトラッキング

                                            一意の電話番号を使用して、さまざまなマーケティングキャンペーンの有効性を測定します。

                                            SMS を介したサーバー通知

                                            e-mail よりも早く届き、ブロックされにくい テキストメッセージサービスはタイムリーに通知や警告に最適です。サーバー管理者に SMS・MMS で通知を送る方法を学びます。

                                            これは役に立ちましたか?

                                            Thanks for checking out this tutorial! If you have any feedback to share with us, we'd love to hear it. Connect with us on Twitter and let us know what you build!

                                            Jarod Reyes Agustin Camino Andrew Baker Paul Kamp Kat King Kelley Robinson
                                            Rate this page:

                                            ヘルプが必要ですか?

                                            We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.