【Wakarana】2要素認証を有効化する
Wakaranaで、TOTP(時間ベースワンタイムコード)による2要素認証を有効化するサンプルコードです。wakaranaでは、ユーザーごとに2要素認証の有効・無効を切り替えることができます。
このコードでは、まずTOTPの生成キーをユーザーに提示して、手動でTOTP対応クライアントアプリに登録してもらい、次にそのアプリが生成するワンタイムコード(PIN)に異常がないことを確認して2要素認証を有効化します。
sample_1.php
<?php
include "wakarana/main.php";
$wakarana = new wakarana();
$user = $wakarana->check();
if (!is_object($user)) {
// ログインしていない場合
exit();
}
// ランダムなワンタイムコード生成キーを作成
$key = wakarana::create_random_code();
print '時間ベースワンタイムコード生成キー「'.$key.'」をクライアントアプリケーションに入力して、表示されたPINを以下に入力してください。';
print '<form action="sample_2.php" method="post">';
print ' <input type="hidden" name="key" value="'.$key.'">';
print ' PIN <input type="text" name="pin">';
print ' <input type="hidden" name="token" value="'.$user->create_one_time_token().'">';
print ' <button type="submit">送信</button>';
print '</form>
sample_2.php
<?php
include "wakarana/main.php";
$wakarana = new wakarana();
$user = $wakarana->check();
if (!is_object($user) && isset($_POST["token"]) && $user->check_one_time_token($_POST["token"])) {
// 不正なアクセスの場合
exit();
}
// クライアントアプリケーションの生成したPINが正常であることを確認
if ($wakarana->totp_compare($_POST["key"], $_POST["pin"])) {
// 2要素認証を有効化
$user->enable_2_factor_auth($_POST["key"]);
} else {
print "正しいPINではありません";
}