メニュー

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, Ruby and Rails

This Ruby on Rails sample application is an example of a typical login flow. To run this sample app yourself, download the code and follow the instructions on GitHub.

二要素認証(2FA)をウェブアプリケーションに追加すると、ユーザーのデータのセキュリティーが向上します。多要素認証では、アプリへのログインによって 1 回検証し、モバイルデバイスの検証によってもう 1 回検証することで、ユーザーのアイデンティティーを特定します。

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

  • モバイル Authy アプリへの OneTouch プッシュ通知をユーザーに送信する
  • モバイル Authy アプリを通じてユーザーにトークンを送信する
  • Twilio 経由で Authy を使って送信されたテキストメッセージでワンタイムトークンをユーザーに送信する

VMwareがAuthy 2FAを使用してエンタープライズモビリティー管理ソリューションをセキュアにしているか見てみましょう。

はじめましょう!

Authy の設定

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

Authy API キーを用意したら、環境変数として登録します。

        
        
        
        
        config/initializers/authy.rb

        Register Authy as 2FA provider

        config/initializers/authy.rb

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

        Register a user using Authy

        ユーザーをAuthyに登録する

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

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

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

              
              
              
              
              app/controllers/users_controller.rb

              ユーザーをAuthyに登録する

              app/controllers/users_controller.rb

              Having registered our user with Authy, we then can use Authy's OneTouch feature to log them in.

              See how to log a user in with Authy

              Authy OneTouchでログインする

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

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

              • ユーザーへの OneTouch 承認リクエストの送信を試みます。
              • ユーザー の OneTouch が有効になっている場合は、成功メッセージが返されます。
              • ユーザーが Authy アプリで「Approve」を押します。
              • Authy は、approved ステータスを持つアプリに POST リクエストを発行します。
              • ユーザーをログインさせます。
              OneTouchリクエストの送信方法

              OneTouchリクエストを送信する

              ユーザーがログインしたら、直ちに OneTouch でアイデンティティの検証を試みます。ユーザーが OneTouch デバイスを持っていない場合はグレースフルにフォールバックしますが、試してみるまでは分かりません。

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

              "message" => "Request to Send Money to Jarod's vault",
              "details['Request From']" => "Jarod",
              "details['Amount Request']" => "1,000,000",
              "details['Currency']" => "Galleons",
              
                    
                    
                    
                    
                    app/controllers/sessions_controller.rb

                    Implement OneTouch Approval

                    app/controllers/sessions_controller.rb

                    Once we send the request we need to update our User's authy_status based on the response. But first we have to register a OneTouch callback endpoint.

                    コールバックエンドポイントの登録方法を確認する

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

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

                    注:リクエストが Authy から来ていることを確認するために、Authy から来ているリクエストではないと思われる場合にそのリクエストを停止するヘルパーメソッド authenticate_request! を記述しました。

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

                          
                          
                          
                          
                          app/controllers/authy_controller.rb

                          Configure OneTouch Callback

                          app/controllers/authy_controller.rb

                          Our application is now capable of using Authy for two-factor authentication. However, we are still missing an important part: the client-side code that will handle it.

                          Handle authentication in the browser

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

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

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

                                
                                
                                
                                
                                app/assets/javascripts/sessions.js

                                Let's take a closer look at how we check the login status on the server.

                                Confirm the login

                                2FA ステップを完了する

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

                                      
                                      
                                      
                                      
                                      app/controllers/authy_controller.rb

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

                                      関連トピック

                                      関連トピック

                                      Twilio を使う Ruby 開発者であれば、他のチュートリアルもお楽しみください。

                                      匿名通話

                                      音声通話およびSMSを使い匿名でユーザー同士を接続しプライバシーを保護します。使い捨ての電話番号をオンデマンドで用意し、2人のユーザーが電話番号など個人情報を交換しなくても通話できる方法を学びます。

                                      通話のトラッキング

                                      Twilio を使って、マーケティングキャンペーンの有効性を測定します。

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

                                      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 Jose Oliveros Agustin Camino Andrew Baker Kat King David Prothero
                                      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.