前回、Microsoftが提供するクラウドベースの認証サービス「Azure Active Directory(Azure AD)」を利用したユーザー認証について紹介しました。今回はAzure ADで管理されているユーザー情報を利用して、Office 365のOneDriveに保存されているドキュメントのクロールから検索するまでの方法を説明していきます。

Fessは、前回と同じバージョン 13.8.0を利用します。

プラグインのインストール

まず、Fessを起動して、OneDriveをクロールするためのプラグインをインストールします。

管理画面の左メニューで「システム」→「プラグイン」をクリックし、画面左上の「インストール」をクリックします。ここで、プルダウンメニューから「fess-ds-office365-13.8.0」を選択し、「インストール」ボタンをクリックしてプラグインをインストールしてください。

プラグインのインストール

プラグインのインストール

インストール後、プラグインの一覧画面を表示して「fess-ds-office365」が表示されていることを確認します。

プラグインの一覧

プラグインの一覧

クロール用アプリの登録

次に、クロール用のアプリをAzure ADに登録します。

Azure Portalにログインし、「Azure AD」→「アプリの登録」をクリックします。

アプリの登録

アプリの登録

「新規登録」をクリックして、「名前」欄にアプリの名前を入力します。ここでは、「Fess-Craw」としました。「サポートされているアカウントの種類」については以下のように設定し、「登録」ボタンをクリックします。

アプリの登録

アプリの登録

左側に表示されている「証明書とシークレット」→「新しいクライアントシークレット」をクリックします。「説明」欄への入力は任意ですが、今回はアプリと同じ名前を入力しておきます。有効期限を選択し、「追加」ボタンをクリックしてください。

新しいクライアントシークレットの登録

新しいクライアントシークレットの登録

追加されたシークレットの値をコピーしておきます。この値は再度表示されないため、別画面に遷移する前に記録しておいください。

クライアントシークレットの値をコピー

クライアントシークレットの値をコピー

次に「APIのアクセス許可」画面で「アクセス許可の追加」ボタンをクリックします。APIは「Microsoft Graph」を選択します。

APIのアクセス許可

APIのアクセス許可

「APIアクセス許可の要求」で「アプリケーションの許可」をクリックして、以下のAPIを検索して追加します。

  • Directory.Read.All
  • Files.Read.All
  • Group.Read.All
  • Notes.Read.All
  • Sites.Read.All
  • User.Read.All

クロール設定

クロール設定の前に、Azure Portalで「Azure Active Directory」の「テナントID」を確認しておきます。Azure Portalにログインして「Azure Active Directory」をクリックすると、「概要」画面が表示されます。テナント情報のなかに「テナントID」が表示されているので、これをコピーしておいてください。

Azure ADのテナントID

Azure ADのテナントID

次にFessの管理画面にログインし、「クローラ」→「データストア」→「新規作成」を開き、クロール設定を作成します。設定が必要な項目は以下の4つです。

  • 名前
  • ハンドラ
  • パラメータ
  • スクリプト

「名前」には任意の文字列を入力し、「ハンドラ」は「OneDriveDataStore」を選択してください。

「パラメータ」は、以下のように入力してください。

tenant=テナントID
client_id=クロール用アプリのクライアントID
client_secret=クロール用アプリのシークレットの値

「スクリプト」は、以下のように入力してください。

title=files.name
content=files.description + "\n" + files.contents
mimetype=files.mimetype
created=files.created
last_modified=files.last_modified
url=files.web_url
role=files.roles
content_length=files.size
filetype=files.filetype
timestamp=files.last_modified

取得できる値のキーと値の説明は以下の通りです。「File」はOneDriveの1ファイルを指しています。

キー
files.name Fileの名前
files.description Fileの説明
files.contents Fileの中身(テキスト)
files.mimetype FileのMIMEタイプ
files.created Fileの作成日時
files.last_modified Fileの最終編集日時
files.web_url FileをWeb上で閲覧するリンク
files.roles Fileにアクセス可能なrole
files.size Fileのサイズ
files.filetype Fileの種類

クロールの実行

クロール設定ができたらクロールを実行してみましょう。

管理画面の左メニューの「システム」→「スケジューラ」で「Default Crawler」のジョブを開きます。「今すぐ開始」をクリックしてクローラを開始し、ジョブの状態が「実行中」から「有効」になるまで待ちます。

検索

検索画面には、「http://localhost:8080/sso/」でログインしてからアクセスできます。Microsoftのサインイン画面が表示されるので、Azure ADに登録されているアカウントでサインインしてください。

サインイン

サインイン

認証が成功すると検索画面が表示されるので、検索フォームに検索語を入れて検索してみましょう。検索結果には、ログインしているユーザーがアクセス権限を持っているドキュメントだけが表示されます。

検索結果画面

検索結果画面

* * *

今回は、Azure ADで管理されるユーザーの権限で、OneDrive内のファイルを検索する方法を紹介しました。Office 365内のファイル検索をする際は参考にしてみてください。

著者紹介

菅谷 信介 (Shinsuke Sugaya)

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