メニュー

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?

Authy、Python、およびFlaskを使用した2要素認証

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

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

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

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

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

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

Authy の設定

まだ Authy にサインアップしていない場合は、ここでサインアップします。最初のアプリケーションを作成し、任意の名前を付けます。アプリケーションを作成すると、プロダクション API キーがダッシュボードに表示されます。

Once we have an Authy API key, we store it in our .env file, which helps us set the environment variables for our app.

場合によっては、Authy ダッシュボードの OneTouch セクションでアプリケーションのコールバック URL も設定する必要があります。詳細については、プロジェクトの README を参照してください。

        
        
        
        
        authy2fa-flask/.env_example

        Environment Variable Settings

        authy2fa-flask/.env_example

        Flask アプリを設定したので、ユーザーを Authy に登録する方法を見てみましょう。

        Register a user using Authy

        ユーザーをAuthyに登録する

        When a new user signs up for our website we call this helper function, which handles storing the user in the database as well as registering the user with Authy.

        In order to get a user set up for your application you will need their email, phone number and country code. We have fields for each of these on our sign up form.

        ユーザーを Authy に登録すると、そのユーザーの Authy ID をレスポンスから取得できます。これは、Authy でユーザーのアイデンティティを確認する方法となるため、非常に重要です。

              
              
              
              
              twofa/utils.py

              Next up, let's take a look at the login.

              Log in with OneTouch

              Authy OneTouchでログインする

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

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

              • We attempt to send a OneTouch Approval Request to the user
              • ユーザー の OneTouch が有効になっている場合は、 success メッセージが返される
              • The user hits Approve in their Authy app
              • Authy makes a POST request to our app with an approved status
              • ユーザーをログインさせる
                    
                    
                    
                    
                    twofa/auth/views.py
                    OneTouchリクエストの送信方法

                    OneTouchリクエストを送信する

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

                    Authy lets us pass extra details with our OneTouch request including a message, a logo, and any other details we want to send. We could easily send any number of details by appending details[some_detail] to our POST request. You could imagine a scenario where we send a OneTouch request to approve a money transfer:

                    data = {
                        'api_key': client.api_key,
                        'message': "Request to send money to Jarod's vault",
                        'details[Request From]': 'Jarod',
                        'details[Amount Requested]': '1,000,000',
                        'details[Currency]': 'Galleons'
                    }
                    
                          
                          
                          
                          
                          twofa/models.py

                          Once we send the request we update our user's authy_status based on the response. This lets us know which method Authy will try first to verify this request with our user. But first we have to register a OneTouch callback endpoint.

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

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

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

                          Note: In order to verify that the request is coming from Authy we've written a decorator, @verify_authy_request, that will halt the request if we cannot verify that it actually came from Authy.

                          Here in our callback, we look up the user using the authy_id sent with the Authy POST request. In a production application we might use a websocket to let our client know that we received a response from Authy. For this version, we keep it simple and update the authy_status on the user. Our client-side code will check that field before completing the login.

                                
                                
                                
                                
                                twofa/auth/views.py

                                では、クライアントサイドのコードを見てみましょう。

                                Handle 2FA asynchronously

                                Handle Two-Factor Asynchronously

                                二要素認証をシームレスにするためには、非同期的に行うのが最適です。それにより、ユーザーは二要素認証が行われていることすら分からないようになります。

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

                                First we hijack the login form submit and pass the data to our sessions/create controller using Ajax. Depending on how that endpoint responds, we will either wait for a OneTouch response or ask the user to enter a token.

                                OneTouch レスポンスを予期している場合は、OneTouch ログインが承認または拒否されたことを確認するまで /login/status のポーリングを行います。

                                      
                                      
                                      
                                      
                                      twofa/static/js/sessions.js

                                      Handle Two-Factor Asynchronously

                                      twofa/static/js/sessions.js

                                      Now let's see how to handle the case where we receive a denied OneTouch response.

                                      How to handle exceptions

                                      Fall back to a Token

                                      This is the endpoint that our javascript is polling. It is waiting for the user's authy_status to be either approved or denied. If the user approves the OneTouch request, our JavaScript code from the previous step will redirect their browser to their account screen.

                                      If the OneTouch request was denied, we will ask the user to log in with a token instead.

                                            
                                            
                                            
                                            
                                            twofa/auth/views.py

                                            Handle Login Status

                                            twofa/auth/views.py

                                            Now let's see how to send a token to the user.

                                            Send a token

                                            Send a Token

                                            このビューは、トークンを送信してから、ユーザーが入力するコードを検証します。

                                            In the case where our user already has the Authy app but is not enabled for OneTouch, this same method will trigger a push notification that will be sent to their phone with a code inside the Authy app.

                                            The user will see a verification form.

                                            A POST request to this view validates the code our user enters. First, we grab the User model by the ID we stored in the session. Next, we use the Authy API to validate the code our user entered against the one Authy sent them.


                                            If the two match, our login process is complete! We mark the user's authy_status as approved and thank them for using two-factor authentication.

                                                  
                                                  
                                                  
                                                  
                                                  twofa/auth/views.py

                                                  Verify users via Authy Token

                                                  twofa/auth/views.py

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

                                                  関連トピック

                                                  関連トピック

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

                                                  SMS・MMS 通知

                                                  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!

                                                  Andrew Baker Agustin Camino Kat King Kelley Robinson
                                                  Rate this page:

                                                  ヘルプが必要ですか?

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