KeycloakでOTP認証を試してみたときのメモ

はじめに

以下の記事を参考に Keycloak で二要素認証をしてみた。
そのときのメモ。結論から言うと、めちゃめちゃ簡単にできた。

qiita.com

準備

Keycloak のデプロイは以下の記事を参考にすでにできているものとします。あとは、「FreeOTP」がインストールされた IPhone を用意します。(今回は試していないのですが Google Authenticator でもできるようですね) kent056-n.hatenablog.com

やったこと

上記で紹介した qiita に書かれている記事通りの手順で問題なくできた。

Keycloak 管理設定

まず、Keycloak管理設定を確認してみるを参考に、Keycloak管理コンソールにアクセスして設定していきます。
前回の記事通りの設定であれば、http://192.168.33.10:8080/auth/admin/master/console/にアクセスして、[Configure] > [Authentication]で認証フローの設定画面にたどり着けます。 記事にも記載されていますが、こちらの認証フロー設定画面で、各認証タイプに対して、「ALTERNATIVE」、「REQUIRED」、「OPTIONAL」、「DISABLED」が設定できます。
利用したい認証タイプの必要条件を変更することで多要素認証が実現できるようですね。今回は以下のような設定にしておきました。 f:id:kent056-n:20180621010202p:plain

OTPポリシー設定

先ほどの Authentication のページの OTP Policy タブをクリックすることで OTP のポリシーが設定できます。
設定できる項目としては、「OTP Type」、「OTP Hash Algorithm」、「Number Digits」、「Look Ahead Window」、「OTP Token Period」、「Supported Application」があります。それぞれの設定できる値と?マークに記載されている説明をまとめてみました。

項目 説明 設定値
OTP Type totp is Time-Based One Time Password. 'hotp' is counter base one time password in which the server keeps a counter to hash against TimeBased・Councer Based
OTP Hash Algorithm What hashing algorithm should be used to generate the OTP. SHA1・SHA256・SHA512
Number of Digits How many digits should the OTP have? 6・8
Look Ahead Window How far ahead should the server look just in case the token generator and server are out of time sync or counter sync? 任意の値?(デフォルトは 1)
OTP Token Period How many seconds should an OTP token be valid? Defaults to 30 seconds. 任意の値?(デフォルト 30)
Supported Applications Applications that are known to work with the current OTP policy FreeOTP, Google Authenticator

OTP Hash Algorithm といったものだけでなく、TOTP、HOTP といった OTP Type まで UI から選べるのは良いですね。(Supported Applications の追加はできないのかどうか気になる...)
今回は「OTPポリシー」タブと同様に、以下のデフォルト値のまま進めていきました。(また別の記事か何かでいろいろと挙動を確認したい...) f:id:kent056-n:20180621010406p:plain

ユーザ設定

以下の Admin console から、右上の [Admin] > [Managed account] > [Authenticator]の順でユーザの OTP 設定をおこなう。 f:id:kent056-n:20180621013236p:plain ユーザ設定をしてみるを参考に、FreeOTPの設定をしてく。
以下のような画面が表示されたらおそらく設定がうまくできているかと思います。(全く同様の手順で設定できました) f:id:kent056-n:20180621013719p:plain

確認

ここまでできたら、最後に確認をします。
こちらも、認証の確認をしてみると同様の手順でパスワード > OTPの順で入力することで確認できました。

おわりに

かなり簡単にできました。