Two-Factor Authentication with Authy, Ruby and Rails
For new development, we encourage you to use the Verify API instead of the Authy API. The Verify API is an evolution of the Authy API with continued support for SMS, voice, and email one-time passcodes, an improved developer experience and new features including:
- Twilio helper libraries in JavaScript, Java, C#, Python, Ruby, and PHP
- Access via the Twilio CLI
- Improved Visibility and Insights
- Push authentication SDK embeddable in your own application
You are currently viewing the Authy API. The Authy API will continue to be maintained, but any new features and development will be on the Verify API. Check out the FAQ for more information and Verify API Reference to get started.
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 キーを用意したら、環境変数として登録します。
Authy でユーザーを登録する方法を見てみましょう。
ユーザーをAuthyに登録する
新規 ユーザー がウェブサイトにサインアップしたら、この経路を呼び出します。これにより、新しいユーザーがデータベースに保存され、そのユーザーが Authy に登録されます。
アプリケーションをセットアップするために Authy が必要とするものは、ユーザーの E メール、電話番号、および国コードだけです。二要素認証を実行するには、サインアップの時点でこの情報を必ず求める必要があります。
ユーザーを Authy に登録すると、authy id が返されます。これは、Authy でユーザーのアイデンティティーを確認する方法となるため、非常に重要です。
Having registered our user with Authy, we then can use Authy's OneTouch feature to log them in.
Authy OneTouchでログインする
ユーザーがウェブサイトにログインしようとしたら、第 2 形式の識別をユーザーに求めます。まずは、OneTouch 検証を見てみましょう。
OneTouch は以下のように機能します。
- ユーザーへの OneTouch 承認リクエストの送信を試みます。
- ユーザー の OneTouch が有効になっている場合は、成功メッセージが返されます。
- ユーザーが Authy アプリで「Approve」を押します。
- Authy は、approved ステータスを持つアプリに POST リクエストを発行します。
- ユーザーをログインさせます。
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",
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
を更新するだけにします。
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.
二要素をブラウザーで処理する
サーバーサイドで何が起こっているのかについてはすでに見てきましたので、次に JavaScript がそれらのサーバーエンドポイントとどのように連係しているのかを見てみましょう。
OneTouch レスポンスを予期している場合は、Authy ステータスが空でないことを確認するまでまず /authy/status
をポーリングします。このコントローラーを確認し、何が起こっているのかを見てみましょう。
Let's take a closer look at how we check the login status on the server.
2FA ステップを完了する
authy_status
が承認された場合、ユーザーは保護されているコンテンツにリダイレクトされます。それ以外の場合は、リクエストが拒否されたことを示すメッセージとともにログインフォームを表示します。
これで終わりです。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!
ヘルプが必要ですか?
誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。