1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vonage Verify:2FA API(電話番号で二要素認証)

Posted at

最近色々なセキュリティー事件があって、2FA(二要素認証)がとても話題になっています。従って、Vonage Verify APIとコールの仕方を簡単に話したいと思います。PINコードをSMS・TTS(Text To Speech:自動音声)で送信することがとても簡単です。2つのAPIコールだけです。

#Vonage Verifyとは?
Vonage Verifyは2FAを提供しているAPIです。SMSもTTSも利用できて、便利です。SMSもらえない固定電話でも対応できます。やっぱり自分で同じ2FA機能を開発すると、PINコードの管理、SMS・TTSのフェールーオバー、不正アクセスの監視など作らないといけないから、かなり工数がかかるようです。

###Verify 2FAのフロー
Verify Workflow.png

下記のフローで認証させます。

  1. (APIコール)Verify Requestを作成:認証で使う電話番号をリクエストに入れて、request_idが返される。
  2. PINコードが送信される。SMSからTTS、SMSの再送信など自動的にハンドリングされる。
  3. エンドユーザーがPINコードをアプリに入力する。
  4. (APIコール)Verify Check:さっきもらったrequest_idに対して、エンドユーザーが入力したPINコードを確認する。結果が返される。
  5. 成功・失敗によって、エンドユーザーにフィードバックする。

###何でメールでPINコードを送信しないんですか?
確かにメールでも2FAができますが、セキュリティーの面で考えると電話(SMS、音声)の方が個人的には安心だと思います。メールによくハッキングされるし、ユーザー名・パスワードが分かれば、入れてしまう場合が多いです。SMS・TTSになるとその携帯(正しく言うと番号と紐付いているSIMカード)を持たないともらえません。

後は、日本で電話番号を契約する前に身分証明書の提出などの本人確認があります。このように電話番号の配付について各キャリアがちゃんとやっていますが、メールになると誰でもいくらでも作れます。使い捨てのメールサービスも少なくはないです。

#Vonage Verifyをコールします。
話は長くなったので、もう試しましょう。

###事前に準備するもの
・VonageのAPI Key(ここから作れます
・curl、postmanなど

###Verify Requestを作成

APIコール

Request作成
curl -X GET "https://api.nexmo.com/verify/json?\
api_key=API_KEY\
&api_secret=API_SECRET\
&number=PHONE_NUMBER\
&brand=MyAppName5\
&sender_id=MyCompany5\
&code_length=4"

パラメータについて
brand:SMSテキストの中に書いてあるブランド名・アプリ名など
sender_id:SMSの送信元

Response

Response
{
  "request_id":"4f707e22e95d4f5393f883872cee24da",
  "status":"0"
}

「status:0」ということはエラーなしで受け取りました。

PINコードが送信された
PIN Code Received.png
ちゃんと来ました。入力したパラメータ(brand、sender_id)も反映されました。

###PINコードを確認

APIコール

PINコードを確認
curl -X GET "https://api.nexmo.com/verify/check/json\
?&api_key=API_KEY\
&api_secret=API_SECRET\
&request_id=4f707e22e95d4f5393f883872cee24da&code=5931"

Response

Response
{
  "request_id":"4f707e22e95d4f5393f883872cee24da",
  "status":"0",
  "event_id":"1C0000008BAD4250",
  "price":"0.05000000",
  "currency":"EUR",
  "estimated_price_messages_sent":"0.07000000"
}

また「status:0」はエラーなし、成功しました。

###リクエスト検索
作ったリクエストはどうなっているの?と知りたい場合、リクエストの検索もできます。かなりの詳細まで情報が出ます。
APIコール

リクエスト検索
curl -X GET "https://api.nexmo.com/verify/search/json\
?&api_key=API_KEY\
&api_secret=API_SECRET\
&request_id=4f707e22e95d4f5393f883872cee24da"

Response

Response
{
  "request_id":"4f707e22e95d4f5393f883872cee24da",
  "account_id":"API_KEY",
  "number":"PHONE",
  "sender_id":"MyCompany5",
  "date_submitted":"2020-10-14 02:20:11",
  "date_finalized":"2020-10-14 02:21:25",
  "checks":[
    {
      "date_received":"2020-10-14 02:21:25",
      "code":"5931",
      "status":"VALID",
      "ip_address":""
    }
  ],
  "first_event_date":"2020-10-14 02:20:11",
  "last_event_date":"2020-10-14 02:20:11",
  "price":"0.05000000",
  "currency":"EUR",
  "status":"SUCCESS",
  "estimated_price_messages_sent":"0.07000000",
  "events":[
    {
      "id":"1C0000008BAD4250",
      "type":"sms"
    }
  ]
}

#参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?