OpenAM 13の新機能を試してみた(1) - 2段階認証

今年のQ4にリリースが予定されているOpenAM 13ですが、Nightly Build版で新機能を試せそうな状態だったので動作を確認してみました。
なお、新機能についてはSNAPSHOT版のリリースノートに一覧が書かれ始めています。

今回のエントリでは2段階認証(Two Step Verification) の新機能について簡単に紹介。

※2015/10/06時点のNightly Build版で確認しています。

2段階認証(Two Step Verification) の新機能

OpenAM 12でも、OTPを使った認証モジュールと組み合わせることで2段階認証自体は可能でした。OpenAM 13からは、デバイス登録の機能も組み込まれたようです。詳細はSNAPSHOT版のマニュアルに書かれていますが、初回ログイン>QRコードでデバイス登録>デバイスでOTP発行してログイン というよくある初期登録のフローがOpenAM単体でできるようになっています。

Nightly Build版で動作確認

Nightly Build版をダウンロードしてインストールし、Procedure 2.10. To Create an Authentication Chain for Two Step Verificationの通りに設定してもまだ動作せず。

エラー情報とソースをしばらく眺めるとちょいと変更すれば動作しそうだったので試してみた。結論から言うと、デバイス登録とOTPによるログインのフローを動作させることはできました。

動作確認

OTP発行にはAndroid版のGoogle Authenticatorを利用して確認しました。

  1. 事前に作成しておいたアカウント(test1)でログインするf:id:Hirohiro:20151008091749p:plain
  2. OTP入力の画面に遷移しますが、まだデバイス未登録なのでここで REGISTER DEVICE をクリックf:id:Hirohiro:20151008091803p:plain
  3. QRコードが表示されるので、Google Authenticatorでキャプチャして設定を行うf:id:Hirohiro:20151008092003p:plain
  4. 次に進み、登録したGoogle Authenticatorで発行されたOTPを入力してSUBMITf:id:Hirohiro:20151008092554p:plainf:id:Hirohiro:20151008092013p:plain
  5. ログインが完了しユーザのプロフィールページに無事に遷移

設定時の注意点

Procedure 2.10. To Create an Authentication Chain for Two Step Verification通りなのだが、認証モジュールは ForgeRock Authenticator (OATH) を選ぶこと(OATHだと駄目)。

その他注意点

  • XUIのログイン画面はどうもまだ安定していなくて、特にレルムを使うとブラウザからのREST API呼び出しでエラーが出まくります。試す場合は、デフォルトのトップレベルのレルム(/)を使ったほうが良いです。
  • 2段階認証をトップレベルレルムのデフォルトの認証連鎖に設定すると、amadminでログインする際にもOTPが求められ管理コンソールにログインできなくなります。その場合は下記URLのようにDataStoreモジュールを直接指定してログイン画面を開けばOK。

Nightly Build版で動作させるための修正点

Nightly Build版で動作させるための変更内容についても書いておきます。HTMLファイルを置くだけでいいので、OpenAMのビルドは不要です。正式リリースまでにはきっと直るはず。

  • (OPENAM_WAR)/XUI/templates/openam/authn/ 以下に AuthenticatorOATH2.html を作成。
<div class="container" id="oath-container">
    {{#if reqs.header}}
    <div class="page-header">
        <h1 class="text-center">{{reqs.header}}</h1>
    </div>
    {{/if}}
    <form action="" method="post" class="form col-sm-6 col-sm-offset-3" autocomplete="off">
        <fieldset>
            {{#each reqs.callbacks}}
            <div class="form-group">
                {{callbackRender}}
            </div>
            {{/each}}
        </fieldset>
    </form>
</div>
  • 同じ内容で、AuthenticatorOATH4.html、AuthenticatorOATH5.html、AuthenticatorOATH7.htmlを同フォルダに作成。