Midari Create > webアプリケーション製品 > Wakarana > サンプルコード >

【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ではありません";
}