前回から時間が空いてしまいましたので、今回は認証が必要なサイトのクロール方法について説明します。
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などの開発に従事。