社内システムでは、端末にログインすると各アプリケーションごとに再ログインする必要がない、シングルサイオン環境が構築されるケースがあります。

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に登録済みの一般ユーザーでログインできることを確認してください。検索画面の右上に、ログインユーザ名が表示されていればログイン成功です。

LDAPユーザでログイン

Javaの設定

Java 8 u151 以前では JCE を以下のように Unlimited Strength に置き換える必要があります。

  1. https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.htmlよりファイルをダウンロードし、解凍します。
  2. 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にアクセスする端末のインターネットオプションの設定を、以下のように設定してください。

  1. インターネットオプションを開いて、「セキュリティ」タブを選択します。
  2. 「ローカル イントラネット」ゾーンの「レベルのカスタマイズ」をクリックします。

    レベルのカスタマイズ

  3. 「ユーザ認証」>「ログオン」>「イントラネットゾーンでのみ自動的にログオンする」選択します。

    イントラネットゾーンでのみ自動的にログオンする

  4. 「OK」ボタンをクリックします。
  5. 「セキュリティ」タブの「ローカル イントラネット」ゾーンの「サイト」をクリックします。
  6. 「詳細設定」ボタンをクリックします。
  7. 「このWebサイトをゾーンに追加する」にFessのURLを入力して「追加」ボタンをクリックします。

    このWebサイトをゾーンに追加

  8. 入力したURLが「Webサイト」欄に設定されたことを確認したら「閉じる」ボタンをクリックします。

    Webサイト

  9. インターネットオプション画面に戻ったら「詳細設定」タブを選択し、「セキュリティ」>「統合Windows認証を使用する」にチェックを入れて「OK」ボタンをクリックします。

    統合Windows認証を使用する

  10. 設定変更後は一度 Windows からログアウトしてください。

Fessへアクセス

ドメイン参加している端末でFessにアクセスしてみましょう。

WindowsのログインユーザーでFessにアクセスすると、自動でFessにログインした状態に切り替わります。

検索画面の右上に、Windowsのログインユーザ名が表示されていれば成功です。

ドメイン参加しているユーザでログイン

*  *  *

今回は、Active Directoryと連携したFessでシングルサインオンさせる方法を説明しました。

シングルサインオンを利用することでログイン操作の省略、パスワード管理の負担軽減が期待できます。Active Directory連携とあわせて利用してみてください。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

Apache PredictionIOにて、コミッター兼PMCとして活動。また、自身でもCodeLibs Projectを立ち上げ、オープンソースの全文検索サーバFessなどの開発に従事。