No.389


【SMS認証】SMS認証の実装を検討する

メールアドレス認証…迷惑メール扱い…クレーム…うっ…頭が…

 インターネット上の個人認証といえば一昔前はメールアドレスに認証URL付きのメールを送るのが主だった。
 今は電話番号宛てにパスコードが記載されたショートメールを送信する方式が主流だ。大手サイトは概ねこの方式になってきているのではないだろうか。

 というわけで自分で実装するための情報を検討してみた。


結論

 結論から言うと、大規模なシステムでなければSMS送信代行業者のAPIを利用する方がよさそう。

 あと、送信毎に料金が発生するので、いたずら送信されないようにreCAPTCHAなどで防御するのは必須だろう。


SMSを送信する前提

 SMSの前提としては

  • 携帯電話、正確には電話番号をも持つ機械からしか送信できない。

 ということがある。

 だからEメール等のようにPCから送信することはできない。

 また、この前提のため、MVNOでも電話番号(もしくはSMS対応していない)が無い通信専用カードでは、SMSは送受信できないことになる。別契約(オプション)になるので注意。


解決方法①:SMS送信サービスを使う

 一番お手軽な方法としてはSMS送信を代行してくれる業者を使うことだ。

 業者ごとに使用や料金は違うが、大抵はAPIやSDK(開発キット)が提供されていて、WEBシステムと接続しやすい作りになっている。
 有名な会社だとTwilioというところがある。

 料金は一通あたり0.08ドル、1ドル120円として約10円で送信可能だ。

Why Twilio

 APIを使う前提であればそれ以外のコストはかからないと考えて良い(重要)。


解決方法②:自分でSMS送信を行う

 自分でSMS送信を行うためには下記の準備が必要となる。

  • 何らかのSMS送信機器 ** 加えて、その送信機器にSMS送信を命ずるプログラム
  • SMS送信ができるSIMカード

 SMS送信機器としては Raspberry Piと通信モジュール(3G通信モジュール 3GPi4G通信モジュール 3GPiなど)を組み合わせたものが比較的手軽か。

 コストはMVNOを使うと最低文字数で一通3円くらい。BIGLOBEだと国内一通3円、海外宛100円が最低価格となる。(70文字160バイト。税別)

 一通あたりのコストは安いが、それ以外のコストがけっこうかかる。プログラミングも必要だ。

  • Raspberry Pi本体:5000円
  • 通信モジュール:20000円
  • SIM契約料:3000+394円(BIGLOBE
  • SIM月間費用:900円(BIGLOBE
  • Raspberry Piへの指示を伝えるプログラム
  • Raspberry PiのSMS送信プログラム