2段階認証を実装するための記事まとめ(PHP+認証アプリ)

プログラム
スポンサーリンク

Google Authenticator などの認証アプリを使った2段階認証を、ご自分や自社の WEBサービスに導入するのは少しハードルが高いと思ってはいませんか? 実は、認証アプリを使った2段階認証は、RFC6238 Time-Based One-Time Password Algorithm というとてもシンプルな技術仕様で実装できるため、スマートフォンが普及した現在では、比較的簡単に導入することができます。そこで今回は、PHPと認証アプリを使って2段階認証を実装するための記事をまとめてみました。

2段階認証を実装するための部品

認証アプリを使った2段階認証は次の4つの部品で実装されます。また、認証アプリに表示されるコードは Time-Based One-Time Password(時間ベースのワンタイムパスワード)と呼ばれ、これをよく「TOTP」と略して表記します。

  • 秘密鍵の生成
  • TOTPの検証
  • 秘密鍵を元に otpauth URI を作成
  • otpauth URI を QRコード で表示

認証アプリを使った2段階認証の登録時には、サーバーで生成した秘密鍵を otpauth URI という形式にしてQRコードで表示し、これをクライアントのスマートフォンにインストールした Google Authenticator などの認証アプリで読み込みます。そして、正しく秘密鍵が読み込まれたことを確認するため、クライアントの認証アプリに表示されたコード(TOTP)を入力してもらい、TOTPの検証がOKなら秘密鍵を暗号化してユーザーごとにデータベースなどに保存します。

また、ログイン処理には通常のパスワード認証に加えて、TOTPでも認証する処理を追加します。実装は、登録時に使った「TOTPの検証」の部品がそのまま使えます。

2段階認証を実装するための記事

秘密鍵の生成・TOTPの検証

TOTPを使った2段階認証の簡単な説明と、「秘密鍵の生成」と「TOTPの検証」をするためのライブラリ PHPGangsta/GoogleAuthenticator の使い方をまとめた記事です。

秘密鍵を元に otpauth URI を作成

otpauth URI(TOTP)の作成方法をまとめた記事です。また、otpauth URI には秘密鍵以外にも発行者名などのパラメータを指定するのですが、認証アプリによっては対応していないパラメータもありますので、各種認証アプリの対応状況も調べてみました。

otpauth URI を QRコードで表示

QRコードを表示するためのライブラリ endroid/qr-code の使い方をまとめた記事です。

おわりに

スマートフォンが普及する前は、このTOTP認証を実装するには、まずクライアントにTOTPトークンを配らなければなりませんでした。そのため、オンラインバンキングなどそれなりの規模と収益のあるサービスでなければTOTP認証の実装はハードルが高いものでした。ありがたい時代になったものですね。

コメント

タイトルとURLをコピーしました