社内システムでは、端末にログインすると各アプリケーションごとに再ログインする必要がない、シングルサイオン環境が構築されるケースがあります。
Fessはさまざまなシングルサインオン環境をサポートしていますが、今回はActive Directoryと連携したFessでシングルサインオンを利用する方法を紹介します。
シングルサインオンとは
シングルサインオン(Single Sign-On : SSO)とは、一度の認証操作で複数のアプリケーションやサービスにログインする仕組みです。
シングルサインオンを利用することで、個別のログイン操作が不要になり、各サービスへ登録していた複数のID・パスワードをひとつにまとめることができます。
Fess上でシングルサインオンの設定をすることで、ログイン操作を省略することが可能です。
今回は統合Windows認証を使ったシングルサインオンの設定を説明します。
ADサーバの設定
本記事ではWindows Server 2016を利用し、以下が設定されている想定で説明します。
項目 | 設定値 |
---|---|
ドメイン名 | example.local |
ADサーバ | AD-SERVER.example.local |
ADアクセス用ユーザ | hoge |
上記のユーザのパスワード | fuga |
Fessの起動
Fessは12.3.2を利用します。FessのZIPファイルはFessのダウンロードページから入手することができます。
ZIPファイルを展開し、bin/fess.[sh|bat]
を実行してFessを起動してください。
Fessのサーバ名は以下とします。
項目 | 設定値 |
---|---|
Fessサーバ | FESS-SERVER.example.local |
シングルサインオンの設定前に、あらかじめActive Directoryとの連携を設定しておきます。
Fess管理画面の「システム」>「全般」を開き、LDAP設定の項目に以下の値を入力します。
項目 | 設定値 |
---|---|
LDAP URL | ldap://AD-SERVER.example.local:389 |
Base DN | dc=example, dc=local |
Bind DN | hoge@example.local |
パスワード | fuga |
User DN | %s@example.local |
アカウントフィルタ | (&(objectClass=user)(sAMAccountName=%s)) |
memberOf属性 | memberOf |
入力したら、「更新」ボタンをクリックします。
LDAP設定後、Fessのログイン画面からLDAPに登録済みの一般ユーザーでログインできることを確認してください。検索画面の右上に、ログインユーザ名が表示されていればログイン成功です。
Javaの設定
Java 8 u151 以前では JCE を以下のように Unlimited Strength に置き換える必要があります。
- https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.htmlよりファイルをダウンロードし、解凍します。
- US_export_policy.jar及びlocal_policy.jar ファイルを $JAVA_HOME/jre/lib/security に配置します。
Java 8 u161 以降は JCE を置き換える必要はありません。
SPNの設定
SPN(サービスプリンシパル名)を設定します。
同じActive DirectoryドメインのWindowsにログインし、コマンドプロンプトでsetspn
を使って登録します。
> setspn -S HTTP/FESS-SERVER.example.local hoge
登録できているかを確認します。
> setspn -L hoge
Fessサーバで実行した場合は一度 Windows からログアウトし、再ログインします。
Fessの設定
app/WEB-INF/classes/krb5.conf を下記の内容で作成します。
[libdefaults]
default_realm = EXAMPLE.LOCAL
default_tkt_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
[realms]
EXAMPLE.LOCAL = {
kdc = AD-SERVER.EXAMPLE.LOCAL
default_domain = EXAMPLE.LOCAL
}
[domain_realm]
example.local = EXAMPLE.LOCAL
.example.local = EXAMPLE.LOCAL
app/WEB-INF/classes/auth_login.conf を下記の内容で作成します。
spnego-client {
com.sun.security.auth.module.Krb5LoginModule required;
};
spnego-server {
com.sun.security.auth.module.Krb5LoginModule required
storeKey=true
isInitiator=false;
};
app/WEB-INF/classes/fess_config.propertiesのSSOに関する設定を下記のように変更します。
sso.type=spnego
spnego.logger.level=0
spnego.krb5.conf=krb5.conf
spnego.login.conf=auth_login.conf
spnego.preauth.username=hoge
spnego.preauth.password=fuga
spnego.login.client.module=spnego-client
spnego.login.server.module=spnego-server
spnego.allow.basic=true
spnego.allow.unsecure.basic=true
spnego.prompt.ntlm=true
spnego.allow.localhost=true
spnego.allow.delegation=false
設定完了後、Fessを再起動します。
起動後に管理画面にログインします。「システム」>「全般」を開き、「ログインが必要」を有効にして「更新」ボタンをクリックします。
IE/edgeの設定
Fessにアクセスする端末のインターネットオプションの設定を、以下のように設定してください。
- インターネットオプションを開いて、「セキュリティ」タブを選択します。
- 「ローカル イントラネット」ゾーンの「レベルのカスタマイズ」をクリックします。
レベルのカスタマイズ
- 「ユーザ認証」>「ログオン」>「イントラネットゾーンでのみ自動的にログオンする」選択します。
イントラネットゾーンでのみ自動的にログオンする
- 「OK」ボタンをクリックします。
- 「セキュリティ」タブの「ローカル イントラネット」ゾーンの「サイト」をクリックします。
- 「詳細設定」ボタンをクリックします。
- 「このWebサイトをゾーンに追加する」にFessのURLを入力して「追加」ボタンをクリックします。
このWebサイトをゾーンに追加
- 入力したURLが「Webサイト」欄に設定されたことを確認したら「閉じる」ボタンをクリックします。
Webサイト
- インターネットオプション画面に戻ったら「詳細設定」タブを選択し、「セキュリティ」>「統合Windows認証を使用する」にチェックを入れて「OK」ボタンをクリックします。
統合Windows認証を使用する
- 設定変更後は一度 Windows からログアウトしてください。
Fessへアクセス
ドメイン参加している端末でFessにアクセスしてみましょう。
WindowsのログインユーザーでFessにアクセスすると、自動でFessにログインした状態に切り替わります。
検索画面の右上に、Windowsのログインユーザ名が表示されていれば成功です。
* * *
今回は、Active Directoryと連携したFessでシングルサインオンさせる方法を説明しました。
シングルサインオンを利用することでログイン操作の省略、パスワード管理の負担軽減が期待できます。Active Directory連携とあわせて利用してみてください。
著者紹介
菅谷 信介 (Shinsuke Sugaya)
Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。