2014-07-23

OpenAMでTOTP認証してみる。

OpenAMの多要素認証シリーズとしてTOTP認証をやってみます。

TOTP認証に関しては以下のサイトが詳しいです。

OSSによるアイデンティティ管理(2):不正ログインを食い止めろ! OpenAMで認証強化 (22) - @IT

 

今回は以下のサイトに従って設定していきます。

Google Authenticator and OpenAM - OpenAM - Confluence

 

1. SecretKeyの生成

適当なSecretKeyを決めてbase16エンコード、base32エンコードした値を生成します。

例えば”test12345abcdefg”というキーであれば

base16エンコード値→74657374313233343561626364656667

base32エンコード値→ORSXG5BRGIZTINLBMJRWIZLGM4======

となります。

 

各エンコード値は以下のサイトで簡単に生成できます。

http://online-calculators.appspot.com/base16/

http://online-calculators.appspot.com/base32/

※秘密鍵を第三者に渡すことになるので検証用にお使いください。

2. OpenAMの設定

アクセス制御>対象のレルム>データストア>embedded を選択し

LDAPユーザ属性にtitleとdescriptionを追加します。

openam-ldapsetting2

openam-ldapsetting3

次に アクセス制御>対象のレルム>認証 のモジュールインスタンスでOATHをクリックします。

openam-totp-authmodules

OATHを以下のように設定します。

openam-oathsetting

今回は検証用なので秘密鍵は8桁にしちゃってますが、本番用はもっと大きい桁数(デフォルト32桁)にしてください。

秘密鍵の属性にtitle、最終ログイン時間属性にはdescriptionを割り当てます。あとはデフォルト通り。

※検証用なので属性はテキトーです。

 

また、TOTPのタイムステップ感覚とタイムステップ数ですが

今回利用するGoogle Authenticatorはトークンの生成間隔が30秒なのでデフォルト通りでOKです。

 

最後に認証連鎖を設定します。

こんな感じの認証連鎖を作成↓

openam-totp-authchain

組織認証設定を変更

openam-totp-orgsetting

3. LDAPの設定

OpenAMのデータストア(LDAP)にアクセスしてtitle属性に秘密鍵を格納します。

LDAPにアクセスする手段としてGUIツールのApache Directory Studioを利用します。

 

まず、メニューからLDAP>New Connectionを選択します。

ads-ldapmenu

ホスト名とポートを設定します。ポート番号はデフォルト50389です。

※検証用なので非SSLになっています。

ads-ldapconnection1

バインドするユーザとパスワードを入力します。

デフォルトでは以下のようになります。

BindDN:cn=Directory Manager

Bind password:adminのパスワード

ads-ldapconnection2

BaseDN等を設定します。

ads-ldapconnection3

EditOptionsはデフォルトのままでOKです。

ads-ldapconnection4

あとは接続して対象のユーザを ou=people, dc=openam, dc=forgerock, dc=org 内から探して

title属性に1で生成したbase16エンコードの秘密鍵を格納します。

ads-ldap-totp

 

4. Google Authenticatorのインストールと設定

まずは Google Authenticatorをインストールします。

次にGoogle Authenticatorに読み込ませるQRコードを生成します。

QRコードは以下のサイトで簡単に生成できます。

QR Code Generator – create QR codes for free (Logo, T-Shirt, vCard, EPS)

※秘密鍵を第三者に渡すのはキケンなので検証用にお使いください。

 

URLは以下の形式で入力します。

otpauth://totp/{適当なユーザ名}@{適当なドメイン}?secret={1で作成したbase32エンコードした秘密鍵}

QRコードはこんな感じになります。

qrcode-totp-secretkey

Google Authenticatorを立ち上げるとアカウントの追加画面があるので

「バーコードをスキャン」を選択して上記のQRコードを読み込みます。

googleauthenticator-account

読み込むと自動的に秘密鍵が設定され以下のような画面が表示されます。

googleauthenticator-totp

この6桁の数字がTOTPになります。

 

QRコードを使わずに「提供されたキーを入力」で秘密鍵を手入力で設定してもOKです。

googleauthenticator-totp-manual

 

5. 動作確認

通常通りID/パスワードでの認証が完了するとOATH認証の画面が出ます。

openam-totp-authpage

ここでGoogle Authenticatorで取得したTOTPを入力すれば認証完了になります。

このエントリーをはてなブックマークに追加