2016年3月26日土曜日

OpenAM13.0.0で二段階認証(ID/パスワード+TOTP認証)を使ってみる

ID/パスワード認証+ワンタイムパスワード認証という二段階認証を試してみる。
ワンタイムパスワード認証(以降、OATH認証と略す)を使う際、事前に、クライアントとサーバ間で同じ秘密鍵を共有する必要がある。
OpenAM13.0.0では、この初期登録時の負荷を下げる以下のような新機能を提供している。
  1. 最初に、利用者はOpenAMにID/パスワードでログインする。
  2. OTP生成アプリ(Google Authenticator等)を使い、OpenAMが表示するQRコードをスキャンし、クライアントのデバイスを登録する。
    (このタイミングで、クライアント側に秘密鍵が自動的に登録される)
  3. OTP生成アプリが発行したOTPを使って、OpenAMにログインする。
今回の動作確認では、ワンタイムパスワード(以降、OTPと略す)の発行には、Google Authenticatorを利用する。
また、OpenAMでは、以下の2つのOATH認証方式をサポートしているが、今回は「TOTP」を使ってみる。
  • 時間ベースのOTP(TOTP:Time-based One Time Password RFC 6238)
  • カウンターベースのOTP(HOTP:HMAC-based One-Time Password RFC 4226
OpenAMの設定(事前準備)

  1. OpenAMの管理コンソールに管理ユーザでログインする。
  2. 「/(レルム)」→「Authentication」→「Modules」の順に押す。
    「Add Module」を押し、認証モジュールの名前(任意)と認証タイプ(ForgeRock Authenticator)を選択する。「Create」ボタンを押す。
  3. OATH認証の設定画面で、TOTP認証に必要となる項目を設定する。
    設定後、「Save Change」ボタンを押す。
  4. 「/(レルム)」→「Authentication」→「Chains」の順に押す。
    「Add Chain」を押し、新規に認証連鎖を作成する。このとき、認証連鎖の名前(任意)を入力する。「Create」ボタンを押す。
  5. 作成した認証連鎖画面において、データストア認証→TOTP認証の順番になるように設定する。また、条件として「REQURED(必須)」を選択する。「Save Changes」ボタンを押す。
  6. 「/(レルム)」→「Authentication」→「Settings」の順に押す。
    「組織認証設定」項目において、先ほど作成した認証連携名「totp」を選択する。
    「Save Changes」ボタンを押す。
以上で、OpenAM側の環境設定は完了である。


動作確認

  1. 事前に登録していたユーザでOpenAMにログインする (ID/パスワード認証)。
  2. OTP認証画面に遷移する。
    まだデバイスが未登録なので、「DEVICE REGISTER」ボタンを押す。
  3. QRコードが画面表示されるため、Google Authenticatorで読み取る。
  4. Google Authenticatorで生成したOTPを、OpenAMの認証画面に入力する。


  5. TOTP認証が成功し、ユーザのプロフィール画面に遷移することを確認する。

(補足)

  • 上手く動作しない(デバックする)際には、OpenAMのデバックログを確認する。
    ログファイル名は、「amAuthAuthenticatorOATH」である。
  • 管理ユーザでログインする際には、以下のように認証モジュールを明に指定して、TOTP認証を回避する。

    http://openam.local.com:8080/OpenAM-13.0.0/XUI/#login/?module=DataStore

    「/(レルム)」→「Authentication」→「Settings」で「管理者認証設定」項目に
    「totp」を指定してしまうと、管理者もTOTP認証が必須となってしまうため、注意が必要。
  • ユーザエントリには、"oathDiviceProfiles"という属性に秘密鍵などの情報がJSON形式で格納される。





0 件のコメント: