【Wakarana】2段階認証でのログイン
Wakaranaで利用できる、パスワードとTOTPを併用した2段階認証のサンプルコードです。Wakaranaでは、wakarana::login関数の第3引数にTOTPのPINを指定することで単一段階での2要素認証も可能ですが、2要素認証を有効にしているユーザーだけにPINの入力欄を表示させる場合は2段階認証を使用します。
sample_1.html
<form action="sample_2.php" method="post">
ID <input type="text" name="user_id"><br>
パスワード <input type="text" name="password"><br>
<button type="submit">送信</button>
</form>
sample_2.php
<?php
include "wakarana/main.php";
$wakarana = new wakarana();
//ログイン認証処理
$user = $wakarana->login($_POST["user_id"], $_POST["password"], $_POST["totp_pin"]);
if (is_object($user)) {
print $user->get_name()."としてログインしました";
} elseif (is_string($user)) {
print '時間ベースワンタイムコードを入力してください。';
print '<form action="sample_3.php" method="post">';
print ' <input type="hidden" name="tmp_token" value="'.$user.'">';
print ' PIN <input type="text" name="pin">';
print ' <button type="submit">送信</button>';
print '</form>
} else {
print "ユーザー名またはパスワードが違います";
}
sample_3.php
<?php
include "wakarana/main.php";
$wakarana = new wakarana();
//ログイン認証処理
$user = $wakarana->totp_login($_POST["tmp_token"], $_POST["pin"]);
if (is_object($user)) {
print $user->get_name()."としてログインしました";
} else {
print "PINが違います";
}