Two-Factor Authentication with Authy, Java and Servlets
この Java Servlets サンプルアプリケーションは、Authy を使用して二要素認証(2FA)を実証します。このサンプルアプリを自分で実行するには、コードをダウンロードし、GitHub の指示に従ってください。
二要素認証(2FA)をウェブアプリケーションに追加すると、ユーザーのデータのセキュリティーが向上します。多要素認証では、まずアプリへのログインによって検証した後、Authy を使用してモバイルデバイスで検証することで、ユーザーのアイデンティティーを特定します。
第 2 要素については、ユーザーが携帯電話を所有していることを以下のいずれかによって検証します。
- モバイル Authy アプリへの OneTouch プッシュ通知をユーザーに送信する
- Twilio 経由で Authy を使って送信されたテキストメッセージでワンタイムトークンをユーザーに送信する
Configure Authy
まだ Authy にサインアップしていない場合は、ここでサインアップします。最初のアプリケーションを作成し、任意の名前を付けます。アプリケーションを作成すると、プロダクション API キーがダッシュボードに表示されます。
Authy API キーを入手したら、この .env
ファイルに保存します。このファイルは、アプリの環境変数を設定するのに役立ちます。
場合によっては、Authy ダッシュボードの OneTouch セクションでアプリケーションのコールバック URL も設定する必要があります。詳細については、プロジェクトの README を参照してください。
Authy でユーザーを登録する方法を見てみましょう。
ユーザーをAuthyに登録する
新規ユーザーがウェブサイトにサインアップしたら、このコントローラーを呼び出します。このコントローラーは、データベースへの新規ユーザーの保存と Authy へのユーザーの登録を処理します。
All Authy needs to get a user set up for your application is the email, phone number and country code. In order to do two-factor authentication, we need to make sure we ask for these things at the point of sign up.
Once we register the user with Authy we can get the user's authy_id
back. This is very important since it's how we will verify the identity of our User with Authy.
Having registered our user with Authy, we then can use Authy's OneTouch feature to log them in.
Authy OneTouchでログインする
ユーザーがウェブサイトにログインしようとしたら、第 2 形式の識別をユーザーに求めます。まずは、OneTouch 検証を見てみましょう。
OneTouch は以下のように機能します。
- We check that the user has the Authy app installed.
- In case they do, they will receive a push notification on their device.
- ユーザーが Authy アプリで「Approve」を押します。
- Authy makes a POST request to our app with an
approved
status. - ユーザーをログインさせます。
Now let's look at how to send a OneTouch request.
OneTouchリクエストを送信する
When our user logs in, our app decides which two-factor authentication provider will be used. It can be Authy OneTouch or an SMS token.
ユーザーが登録済みの OneTouch デバイスを所有している場合は、Authy OneTouch が使用されます。
We use the sendApprovalRequest
method to create an approval request. It takes an ApprovalRequestParamater
object with at least the following properties configured:
- Authy ユーザー ID。
- デバイスに表示されるメッセージ。
parameters オブジェクトの構築方法に関する例を以下に示します。
ApprovalRequestParams parameters = new ApprovalRequestParams.Builder(
Integer.valueOf(user.getAuthyId()),
"Request login to Twilio demo app")
.addDetail("email", "alice@example.com")
.addDetail("name", "Alice")
.addHiddenDetail("phoneNumber", "555-5555")
.build();
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 から来ているリクエストではないと思われる場合にそのリクエストを停止するヘルパーメソッド validate
を記述しました。
コールバックでは、Authy POST リクエストで送信された Authy ID を使用してユーザーをルックアップします。この時点では、ウェブソケットを使用して、Authy からレスポンスを受信したことをクライアントに認識させるのが理想的です。ただし、このバージョンでは、単純なままにしておき、ユーザーの AuthyStatus
を更新するだけにします。クライアントサイドのコードで行うべきことは、ユーザーをログインさせる前に user.AuthyStatus == "approved"
を確認することです。
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.
ログインステータスをチェックする
これが、JavaScript がポーリングしているエンドポイントです。ユーザーの Authy ステータスを待ち受けています。
Finally, we can confirm the login.
2FA ステップを完了する
AuthyStatus
が承認された場合、ユーザーはアカウントページにリダイレクトされます。それ以外の場合は、リクエストが拒否されたか許可されなかったかどうかを示すメッセージとともにログインフォームを表示します。
これで終わりです。3 つの異なるメソッドと最新の Authy テクノロジーを使用して二要素認証を実装しました。
次はどこでしょうか?
Twilio を使う Java 開発者であれば、他のチュートリアルもお楽しみください。
e-mail よりも早く届き、ブロックされにくい テキストメッセージサービスはタイムリーに通知や警告に最適です。サーバー管理者に SMS・MMS で通知を送る方法を学びます。
クリックトゥコールはウェブトラフィックをボタンのクリック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!
ヘルプが必要ですか?
誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。