KeycloakのインストールとOTP認証の実装

ここではCentOSマシンもしくはWindowsマシンにKeycloakをインストールする方法と、ワンタイムパスワード(OTP)認証の実装手順を解説します。また同時に、Keycloakの多要素認証についての解説も行います。

事前準備

以下のものが必要になります。
・ Java Development Kit 8がインストールされたマシン
・Google Authenticatorがインストールされたスマートフォン

Keycloakのインストールと起動

次のサイトから「 Standalone server distribution 」をダウンロードし、適当なディレクトリに解凍してください。
https://www.keycloak.org/downloads.html
その後
(centos)$ ./bin/standalone.sh
(windows)> ...\bin\standalone.bat
を実行すればKeycloakサーバーが起動します。「 http://localhost:8080/auth 」にアクセスすると管理ユーザーの設定画面が現れます。

※デフォルト設定で起動した場合、セキュリティのためリモートマシンからKeycloakへはアクセスできなくなっています。そこでリモートマシンからアクセスをしたい場合には、「-b」オプションを使います。
$ ./bin/standalone.sh -b 0.0.0.0
また、初期管理ユーザーの作成画面もリモートマシンからはアクセスできません。ですので、 「bin/add-user-keycloak.sh」 スクリプトで登録をします。
$ ./bin/add-user-keycloak.sh --user [ユーザー名] --password [パスワード]

初期管理ユーザー設定画面
ログイン画面

Keycloakの日本語化とユーザー作成

Keycloakは国際化対応しているので、日本語にも対応しています。 「Themes」のタブをクリックし、「Internationalization Enabled」の設定を「ON」にして「Save」ボタンをクリックしましょう。サイトアウトしもう一度ログインすれば日本語化しているはずです。

次にユーザーを作成します。左の欄のユーザーをクリックし、ユーザーの追加をクリックします。各種入力を終えたら保存をクリックします。次に、クレデンシャルのタブに移りパスワードの設定を行ってください。
(このユーザー名とパスワードは使うので記録しておいてください)

Keycloakの認証設定について

次に、Keycloakの認証設定についての解説を行います。以下はデフォルトの認証設定です。

各認証タイプと必要条件の説明は以下の表にまとめました。

今回は、OTP認証をユーザーに義務付けたいため、OTP Formの必要条件をREQUIREDにしてください。

OTP認証の設定

ではOTP認証の設定に移ります。一度サイトアウトしてください。一般ユーザーのログインURLにアクセスしてください。
「 http://[localhostまたはIPアドレス]/auth/realms/master/account/ 」
先ほど設定した一般ユーザーのID/パスワードでログインすると以下のような画面になるはずです。

このQRコードを、スマートフォンのGoogle Authenticatorで読み取ってください。

その後、この6桁の数字を有効時間が残っている間に、ブラウザに入力してください。これでOTP認証の設定が完了です。

その他

OTP認証の数字の桁数を8にすることができます。Keycloakの管理者ページの左の欄にあるAuthenticationをクリックし、OTPポリシーのタグをクリックします。すると「桁数」という設定項目があるのでそちらを8にすれば8桁の認証になります。

また、今回多要素認証の一つであるOTP認証を紹介しましたが、このほかにもSNSと連携した認証や指紋認証なども実装することができます。

参考サイト

公式のチュートリアルはこちらです。ここではAPIサーバーとの連携を検証することができます。
https://www.keycloak.org/docs/latest/getting_started/index.html

また、Keycloakの各種機能をアドベントカレンダー形式で紹介したものがあります。
https://qiita.com/advent-calendar/2017/keycloak-by-openstandia
(この記事は12日目のものを参考にしました。ありがとうございます。)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です