LoginSignup
3

More than 5 years have passed since last update.

OpenAMでTOTP認証する

Posted at

今日やること

これまでの記事では、IDとパスワードによる認証を経て、Policy Agentが導入されているWebサーバーにアクセスしてました。今日は、この認証にもう1要素加えて、多要素認証としてみたいと思います。
多要素認証ってわたしは呼んでますが、2段階認証とか、2要素認証とか認証サービスごとによっていろいろな呼び方をされてますね。なにか区別しているんでしょうか?

001.jpg

流れとしては、上記のような感じですね。ユーザーはOpenAMで認証して、認証済みのセッションを払いだしてもらうために、1. IDとパスワードで認証2. TOTPで認証を行うという感じです。

TOTPってなに?

TOTPはTime-Based One-Time Passwordの略です。RFCで定義されています。秘密鍵と現在時間を共有する一度きりのパワードを生成するアルゴリズムみたいなもんです。あまり細かいことはわかってません(◞‸◟)

001.jpg

大まかな概要図はこのような感じだと思います。図から想像できるように、KEYは事前に共有しておく必要があります。

OpenAMでTOTP認証を有効化する

それではやっていきましょう!

ForgeRock Authenticator モジュールを追加する

OpenAMの管理コンソールに管理者アカウント(ユーザー名はamadmin)でサインインします。
Authentication => Modules => Add Moduleとアクセスします。

0011.JPG

モジュールの追加ウィザードが表示されます。以下のパラメータを入力し、Createをクリックします。

  • Name
    • TOTP
  • Type
    • ForgeRock Authenticator(OATH)

こんな感じです。

002.JPG

引き続きパラメータを入力し、Save Changesをクリックします。(変更点のみ記載)

  • 使用するOATHアルゴリズム
    • TOTP
  • Name of the issuer
    • iam.example.com

こんな感じです。

003.JPG

Name of issuerは発行元みたいなイメージでしょうか。

TOTPモジュールをチェーンに追加

OpenAMには認証のチェーン(連鎖)という仕組みがあります。「Aという認証が成功したらBという認証」、とか、「Aという認証が成功しても失敗してもBという認証」...とかいう感じで、認証の組み合わせを定義できます。

設定はAuthentication => Chainsから行うことができます。デフォルトでは、ldapServiceというチェーンが適用されていますので、これをクリックします。

004.JPG

ん~(´▽`)直観的でわかりやすいインターフェースだと思います。Add a Moduleから先ほど追加したモジュールを追加することができます。追加後は以下のような画面になります。

006.JPG

ここで、RequireとかRequisiteとか表示されていますが、これは各モジュールの実行後の動作決める条件となります。以下のようなパラメータを設定することができます。

条件 説明
requisite モジュールは成功する必要があります。成功すると、チェーンの次のモジュールに進み、失敗すると、そこで認証失敗となります。
required モジュールの成功が必要です。成功するかどうかに依らず、チェーンの次のモジュールに進みます。
sufficient モジュールの成功は必須ではありません。成功すると、チェーンの次のモジュールに進まず、認証成功となります。失敗すると、チェーンの次の認証モジュールに進みます。
optional モジュールの成功は必須ではありません。成功するかどうかに依らず、チェーンの次のモジュールに進みます。

ForgeRock Authenticatorのインストール

お手持ちのスマホにForgeRock Authenticatorをインストールします。
このアプリはユーザー側のOTPの生成器みたいなものになります。(アップデートしたほうがいいですね...)

007.PNG

動作確認

それでは、試してみましょう。
Policy Agentを導入済みのWebサーバーweb.example.comにアクセスします。
アクセス後、IDとパスワードによる認証画面が表示されますので、検証アカウント(ユーザー名はjohnd)でサインインします。

008.JPG

ユーザー側でOTPを生成するために必要な鍵の事前共有2要素目の認証のプロセスが開始されます。REGISTER DEVICEをクリックします。

009.JPG

先ほど、スマホにインストールしたForgeRock Authenticatorを使って、鍵の登録をします。QRコードが表示されるので、このアプリで読み取ります。

010.JPG

読み取り後、LOGIN USING VERIFICATION CODEをクリックします。
ちなみに、ForgeRock Authenticatorでは、時間の経過とともに変化するOTPが表示されます。

013.png

ここで、表示されているOTPを入力するフォームが表示されるので、ForgeRock Authenticatorに表示されているOTPを入力します。

011.JPG

認証に成功すると、おなじみのApacheの画面が表示され、認証が成功していることが確認できます。

012.JPG

1回目はOTPを生成する鍵の共有が必要だったので、QRコードの読み取りが必要でしたが、2回目以降は不要となります。

はまるとこ

当然、時刻ベースでOTPを生成して、比較するという認証なので、ForgeRock Authenticator側とOpenAM側で時刻があっていないと、認証が成立しません。
気を付けされたし(´◉◞౪◟◉)

まとめると、

  • ForgeRock Authenticatorモジュールで、TOTPをつかった多要素認証を実装できる
  • OpenAMには認証のモジュールを組み合わせて、認証機能を提供できる
  • ForgeRock AuthenticatorはOTPを生成するのに必要な鍵共有のインターフェースもモジュール上で提供している

という感じですかね~。結構簡単にTOTPできました。
ただこのForgeRock Authenticatorで作られたQRコードですが、OTPの生成器アプリとして名高いGoogle Authenticatorで読み取ることができません。なんだか特殊なURNで表現されてるのかな~?ま、いっか(´▽`)

明日はなにしよう~?

ばい!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3