Level up your Twilio API skills in TwilioQuest, an educational game for Mac, Windows, and Linux. Download Now

メニュー

Expand
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 Sinatra

この Sinatra サンプルアプリケーションは、一般的なログインフローの例です。このサンプルアプリを自分で実行するには、コードをダウンロードし、GitHub の指示に従ってください

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

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

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

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

はじめましょう!

Configure 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 register it as an environment variable.

        
        
        
        
        routes/signup.rb

        Configure Authy

        routes/signup.rb

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

        Register a user using Authy

        ユーザーをAuthyに登録する

        When a new user signs up for our website, we will call this route. This will store our new user into the database and will register the user with Authy.

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

        Once we register the user with Authy we get an authy_id back. This is very important since it's how we will verify the identity of our user with Authy.

              
              
              
              
              routes/signup.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 は以下のように機能します。

              • We attempt to send a OneTouch Approval Request to the user.
              • ユーザーがOneTouchを有効にしていれば、 success メッセージが返されます。
              • ユーザーが Authy アプリで「Approve」を押します。
              • Authy makes a POST request to our app with an approved status.
              • ユーザーをログインさせます。
                    
                    
                    
                    
                    routes/sessions.rb

                    次のステップでは、 ユーザーが OneTouch を持っていないかログインリクエストを拒否する事例をどのように扱うのかを見ることにします。

                    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",
                    

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

                          
                          
                          
                          
                          routes/sessions.rb

                          Implement OneTouch Approval

                          routes/sessions.rb

                          Once we send the request we need to update our user's AuthyStatus 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 を更新するだけにします。

                                
                                
                                
                                
                                routes/confirmation.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 をポーリングします。このコントローラーを確認し、何が起こっているのかを見てみましょう。

                                      
                                      
                                      
                                      
                                      public/javascripts/app.js

                                      Finally, we can confirm the login.

                                      Confirm the login

                                      2FA ステップを完了する

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

                                            
                                            
                                            
                                            
                                            routes/confirmation.rb

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

                                            次はどこでしょうか?

                                            次はどこでしょうか?

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

                                            SMS・MMS 通知

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

                                            Click-To-Call

                                            クリックトゥコールはウェブトラフィックをボタンのクリック1つで、電話のトラフィックに変換します。

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

                                            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 David Prothero Kat King
                                            Rate this page:

                                            ヘルプが必要ですか?

                                            誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。