PHP Yubikey で Yubico OTP認証
最近ちらほら見かけるようになった、セキュリティトークンの YubiKeyを試してみました。今回は開発元のYubico社の(ユビカと読むらしい)認証サーバ(YubicoOTP)を使ってみます。米カリフォルニアの企業だけどやっぱり「指」にかけてるのかな?指キーに指子さん(^^)
なにはともあれ Yubikeyが無いと始まらないので、Yubico社のサイトで購入します。とりあえずスタンダードモデルを購入、エアメールで1週間くらいで届きました。

まず Yubikeyの設定をするため管理ソフト(YubiKey Personalization Tool)をインストールします。Yubico社のサイトでもダウンロードできますが、Macの場合は AppStoreからインストールできるのでそちらを利用しました。

YubikeyをMacにさしたら管理ソフトを起動して「Yubikey is inserted」と表示され、認識していることを確認します。

[Yubico OTP]→[Quick] を押します。

「Slot1」を選択して[Regenerate]を何回か押します。「Public Identity」の12文字がYubiKeyを特定するためのIDです。このYubikeyのIDをユーザー情報と紐づけて認証することになります。最後に[Write Configuration]を押して設定をYubiKeyに書込みます。

OTPを生成すると、先頭の12文字が固定になっていることが分かります。
次に設定したYubiKeyを、Yubico認証サーバに登録します。
[Upload to Yubico]を押します。

Yubico社の登録用サイトが開きますので、メールアドレスと Yubikeyで生成したOTPを入力して[Upload AES key]を押します。(他の項目は自動で入力されています)

「Success!」と表示されていれば登録完了です。

設定が反映する15分ほど経過したら、デモサイトで認証できることを確認します。

以上で Yubikeyの登録は完了です。続けてYubico社の認証サーバ(YubicoOTP)を使うためのAPIキーを取得します。
・Yubico Get API Keyサイト
https://upgrade.yubico.com/getapikey/
メールアドレスと YubiKeyのOTPを入力します。

表示された「Client ID」と「Secret key」をこのあと作成するPHPプログラム内で使います。

認証用のPHPを作るにあたって「Auth_Yubico」モジュールをインストールしておきます。
YubiKey OTPをYubica認証サーバで検証した結果が $authに入ってくるので、後はエラー判定するのみ。簡単です(^^)
○サンプルコード
https://github.com/sizaki30/YubiKey
○動作サンプル
https://yubikey130709.cloudcontrolled.com/sample.php
以上です。
なにはともあれ Yubikeyが無いと始まらないので、Yubico社のサイトで購入します。とりあえずスタンダードモデルを購入、エアメールで1週間くらいで届きました。

まず Yubikeyの設定をするため管理ソフト(YubiKey Personalization Tool)をインストールします。Yubico社のサイトでもダウンロードできますが、Macの場合は AppStoreからインストールできるのでそちらを利用しました。

YubikeyをMacにさしたら管理ソフトを起動して「Yubikey is inserted」と表示され、認識していることを確認します。

[Yubico OTP]→[Quick] を押します。

「Slot1」を選択して[Regenerate]を何回か押します。「Public Identity」の12文字がYubiKeyを特定するためのIDです。このYubikeyのIDをユーザー情報と紐づけて認証することになります。最後に[Write Configuration]を押して設定をYubiKeyに書込みます。

OTPを生成すると、先頭の12文字が固定になっていることが分かります。
vvjvdnvcgvgikrterjitthnubdkcvgfkcebbthkfbjhc
vvjvdnvcgvginnilbdhdutcuflriuhufhuifrlgnndnj
vvjvdnvcgvgiicckkvbregikrujtdekeuehfibdbruff
vvjvdnvcgvgirfcvuujtnucejjifncibbvjrtchdtifu
vvjvdnvcgvgihrvtrikfiujeibbdlgdunlkfujkttite
vvjvdnvcgvginnilbdhdutcuflriuhufhuifrlgnndnj
vvjvdnvcgvgiicckkvbregikrujtdekeuehfibdbruff
vvjvdnvcgvgirfcvuujtnucejjifncibbvjrtchdtifu
vvjvdnvcgvgihrvtrikfiujeibbdlgdunlkfujkttite
次に設定したYubiKeyを、Yubico認証サーバに登録します。
[Upload to Yubico]を押します。

Yubico社の登録用サイトが開きますので、メールアドレスと Yubikeyで生成したOTPを入力して[Upload AES key]を押します。(他の項目は自動で入力されています)

「Success!」と表示されていれば登録完了です。

設定が反映する15分ほど経過したら、デモサイトで認証できることを確認します。

以上で Yubikeyの登録は完了です。続けてYubico社の認証サーバ(YubicoOTP)を使うためのAPIキーを取得します。
・Yubico Get API Keyサイト
https://upgrade.yubico.com/getapikey/
メールアドレスと YubiKeyのOTPを入力します。

表示された「Client ID」と「Secret key」をこのあと作成するPHPプログラム内で使います。

認証用のPHPを作るにあたって「Auth_Yubico」モジュールをインストールしておきます。
curl -O http://php-yubico.googlecode.com/files/Auth_Yubico-2.4.tgz
pear install Auth_Yubico-2.4.tgz
pear install Auth_Yubico-2.4.tgz
YubiKey OTPをYubica認証サーバで検証した結果が $authに入ってくるので、後はエラー判定するのみ。簡単です(^^)
require_once "Auth/Yubico.php";
// APIキーのセット
$yubi = new Auth_Yubico("<Client ID>", "<Secret key>", true);
// 認証処理実行
$auth = $yubi->verify("<YubiKey OTP>");
if (PEAR::isError($auth)) {
echo '認証NG';
} else {
echo '認証OK';
}
// APIキーのセット
$yubi = new Auth_Yubico("<Client ID>", "<Secret key>", true);
// 認証処理実行
$auth = $yubi->verify("<YubiKey OTP>");
if (PEAR::isError($auth)) {
echo '認証NG';
} else {
echo '認証OK';
}
○サンプルコード
https://github.com/sizaki30/YubiKey
○動作サンプル
https://yubikey130709.cloudcontrolled.com/sample.php
以上です。
02
| h o m e |