最近色々なセキュリティー事件があって、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のフェールーオバー、不正アクセスの監視など作らないといけないから、かなり工数がかかるようです。
下記のフローで認証させます。
- (APIコール)Verify Requestを作成:認証で使う電話番号をリクエストに入れて、request_idが返される。
- PINコードが送信される。SMSからTTS、SMSの再送信など自動的にハンドリングされる。
- エンドユーザーがPINコードをアプリに入力する。
- (APIコール)Verify Check:さっきもらったrequest_idに対して、エンドユーザーが入力したPINコードを確認する。結果が返される。
- 成功・失敗によって、エンドユーザーにフィードバックする。
###何でメールでPINコードを送信しないんですか?
確かにメールでも2FAができますが、セキュリティーの面で考えると電話(SMS、音声)の方が個人的には安心だと思います。メールによくハッキングされるし、ユーザー名・パスワードが分かれば、入れてしまう場合が多いです。SMS・TTSになるとその携帯(正しく言うと番号と紐付いているSIMカード)を持たないともらえません。
後は、日本で電話番号を契約する前に身分証明書の提出などの本人確認があります。このように電話番号の配付について各キャリアがちゃんとやっていますが、メールになると誰でもいくらでも作れます。使い捨てのメールサービスも少なくはないです。
#Vonage Verifyをコールします。
話は長くなったので、もう試しましょう。
###事前に準備するもの
・VonageのAPI Key(ここから作れます)
・curl、postmanなど
###Verify Requestを作成
APIコール
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
{
"request_id":"4f707e22e95d4f5393f883872cee24da",
"status":"0"
}
「status:0」ということはエラーなしで受け取りました。
PINコードが送信された
ちゃんと来ました。入力したパラメータ(brand、sender_id)も反映されました。
###PINコードを確認
APIコール
curl -X GET "https://api.nexmo.com/verify/check/json\
?&api_key=API_KEY\
&api_secret=API_SECRET\
&request_id=4f707e22e95d4f5393f883872cee24da&code=5931"
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
{
"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"
}
]
}
#参考
- Vonage Verify:https://vonage.com/communications-apis/verify/, https://developer.nexmo.com/verify/overview
- API Documentation:https://developer.nexmo.com/api/verify
- Vonageアカウント作成、管理:https://dashboard.nexmo.com/