前回から時間が空いてしまいましたので、今回は認証が必要なサイトのクロール方法について説明します。

Webサイトにはログイン後に利用できるような、アクセス制限を設けているサイトが数多くあります。

Webサイトの認証方法もいろいろとありますが、Fessではそれらの認証のあるWebサイトでもクロールすることができます。対応するのは、Basic認証、Digest認証、NTLM認証、Form認証です。

Web認証とは

FessでのWeb認証とは、ログインが必要なWebサイトでの認証のことです。WebサイトがWeb認証を設定することで、特定のユーザーだけのアクセスを可能にすることができます。

Web認証はさまざまな種類がありますが、Fessで対応している認証方法について簡単に説明します。

Basics認証

Basic認証はHTTPで定義される基本的な認証方法の一つです。

HTTPヘッダのAuthorizationフィールドに認証情報を記載して送信することでサイトにアクセスできます。

Digest認証・NTLM認証

Digest認証とNTLM認証はBasic認証と同様にHTTPを利用してアクセスします。

Form認証

Form認証は上記の認証とは違い、HTTPではなく、ログインフォームからユーザーがログインして、システムはCookie情報等を利用してユーザーを認証します。

Form認証は多くのWebアプリケーションで利用されるWeb認証です。

Web認証の設定方法

Web認証のサイトをクロールするための設定方法を紹介します。

今回はFess 12.3.1を利用します。FessのZIPファイルはダウンロードページから入手することができます。

ZIPファイルを展開して、bin/fess.[sh|bat]を実行して起動してください。

まず、Fessの管理画面をブラウザで開き(詳細は第1回参照)、「クローラ」>「ウェブ」でクロールを作成してください。このWebクロールの設定は通常のサイトをクロールする設定と同様に作成します。

左側のメニューの「クローラ」>「ウェブ認証」を選択して、Web認証設定の一覧画面を表示します。

右上の「新規作成」ボタンを押下してクロール設定画面を表示します。

主な設定項目の説明は以下のとおりです。

項目 説明
ホスト名 対象サイトのホスト名(省略した場合は任意のホスト名)
ポート 対象サイトのポート番号(省略した場合は任意のポート番号)
レルム 対象サイトのレルム(省略した場合は任意のレルム名)
スキーム 認証方法
ユーザー名 対象サイトにログインするためのユーザー名
パスワード 対象サイトにログインするためのパスワード
パラメータ 認証サイトにログインするために必要な設定値がある場合に設定
ウェブ設定 認証サイトをクロールするクローラ名

以下で、Basic、Digest、NTLM、Form認証のあるサイトをクロールする際の設定例を紹介します。

Basic認証

以下の設定でBasic認証が設定されたサイトをクロールすることを考えます。

項目
URL https://basic.codelibs.org/
ユーザー名 testuser
パスワード testpass

クロール設定をBasicAuth Exampleという名前で作成した場合、Web認証では以下のように設定します。

項目
ホスト名 basic.codelibs.org
ポート (省略)
レルム (省略)
スキーム Basic
ユーザー名 testuser
パスワード testpass
パラメータ (未記入)
ウェブ設定 BasicAuth Example

ホスト名は省略することもできます。1つのクロール設定で複数のWeb認証を処理する必要がある場合はホスト名を指定して、各サイトの認証ができるようにします。

Digest認証

以下の設定でDigest認証が設定されたサイトをクロールするものとします。

項目
URL https://digest.codelibs.org/
ユーザー名 testuser
パスワード testpass

クロール設定をDigestAuth Exampleという名前で作成した場合、Web認証では以下のように設定します。

項目
スキーム Digest
ユーザー名 testuser
パスワード testpass
パラメータ (未記入)
ウェブ設定 DigestAuth Example

NTLM認証

以下の設定でNTLM認証が設定されたサイトをクロールするものとします。

項目
URL https://ntlm.codelibs.org/
ユーザー名 testuser
パスワード testpass

クロール設定をNTLMAuth Exampleという名前で作成した場合、Web認証では以下のように設定します。

項目
スキーム NTLM
ユーザー名 testuser
パスワード testpass
パラメータ 必要に応じて記入
ウェブ設定 NTLMAuth Example

NTLM認証ではワークステーション名とドメイン名をそれぞれworkstationとdomainの値として設定することができます。

これらの値は対象の環境に合わせて設定してください。設定する場合にはパラメータ欄に以下のように記述します。

workstation=HOGE
domain=FUGA

Form認証

Form認証にはさまざまなサイトがありますが、今回はプロジェクト管理のWebアプリケーションであるRedmineをクロールする例として説明します。

Redmineは以下の設定で利用できるものとします。

項目
URL https://redmine.codelibs.org/
ユーザー名 testuser
パスワード testpass

クロール設定をRedmine Exampleという名前で作成した場合、Web認証では以下のように設定します。

項目
スキーム Form
ユーザー名 testuser
パスワード testpass
パラメータ encoding=UTF-8
token_method=GET
token_url=https://redmine.codelibs.org/login
token_pattern=name="authenticity_token" +value="([^"]+)"
token_name=authenticity_token
login_method=POST
login_url=https://redmine.codelibs.org/login
login_parameters=username=${username}&password=${password}
ウェブ設定 Redmine Example

Redmineはauthenticity_tokenをトランザクショントークンとして利用しているので、ログイン時にログイン情報と共に送信する必要があります。

authenticity_tokenはRedmineのログイン画面で取得できます。Fessはそのトークンを取得するために、token_~でその取得方法を設定して、authenticiy_tokenの値を取得するよう設定します。

login_~でサイトへのログインに必要な情報を設定します。login_urlでログインの認証処理をするURLを指定して、login_parametersではログインに必要なリクエストパラメータを指定しています。

${username}${password}はWeb認証のユーザー名とパスワードの値が設定されます。

上記の情報を利用して、Fessはクロール時にサイトに自動でログインして、Form認証が設定されたサイトをクロールします。

Form認証の方法はWebサイトごとに異なります。Form認証のあるサイトをクロールする際はログインページのHTMLやHTTPヘッダーを確認し、適切なパラメータを設定する必要があります。

*  *  *

今回はFessの各種Web認証サイトのクロール方法を紹介しました。

企業内で利用されるサイトや会員制サイトなど、認証が必要となるサイトは数多く存在し、これらのサイトも検索したい場合も多いと思います。

FessではForm認証にも対応しているので、多くの場面で検索する環境を構築することができます。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

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