SharePoint 統合
LibreChatでSharePoint OnlineおよびOneDrive for Businessの統合を設定する
LibreChatは、SharePoint OnlineおよびOneDrive for Businessとのエンタープライズグレードの統合を提供し、ユーザーがMicrosoft 365環境内のファイルを会話内で直接シームレスに閲覧、選択、添付できるようにします。
概要
SharePoint統合により、ユーザーは以下のことが可能になります:
- SharePointドキュメントライブラリおよびOneDriveファイルの閲覧
- 一度に複数のファイルを選択(デフォルトで最大10個まで)
- リアルタイムのダウンロード進捗状況を表示する
- SharePointから会話にファイルを添付する
- 適切なアクセス制御でエンタープライズセキュリティを維持する
エンタープライズ機能
この機能にはMicrosoft 365/SharePoint Onlineが必要であり、Azure Entra ID (旧Azure AD) 認証を使用するエンタープライズ環境向けに設計されています。
前提条件
SharePoint統合を設定する前に、以下が準備されていることを確認してください:
- Azure Entra ID Authentication が設定され、正常に動作していること
- Token Reuse が有効 (
OPENID_REUSE_TOKENS=true) - LibreChatの公開されたAPIスコープ(例:
api://<client-id>/access_as_user) - アプリの権限設定に必要なAzureテナントへの管理者アクセス権
- HTTPS が有効(本番環境では必須)
重要な要件
SharePoint統合は、Microsoft Graph APIへのアクセスにオン・ビハーフ・オブ(on-behalf-of)トークンフローを利用するため、OPENID_REUSE_TOKENS=true が設定されていないと機能しません。
Azure App Registration セットアップ
Step 1: API権限の設定
- Azure Portal でアプリの登録に移動します。
- 左側のメニューにある API permissions に移動します
- Add a permission をクリックします
ステップ 2: LibreChat APIスコープの公開と付与
On-behalf-of フローでは、Microsoft Graph ではなく LibreChat アプリの API をターゲットにするために、初期の OpenID アクセス トークンが必要です。Azure が LibreChat をオーディエンスとするトークンを発行できるように、API スコープを公開してください。
- 左側のメニューにある Expose an API に移動します
- Application ID URI がまだ設定されていない場合は、
api://<client-id>に設定してください。 - Add a scope をクリックします
- スコープに
access_as_userという名前を付けます - スコープを保存してから、完全なスコープの値をコピーしてください:
api://<client-id>/access_as_user次に、そのスコープをアプリ登録に付与します:
- API permissions に戻る
- Add a permission をクリックします
- APIs my organization uses を選択します
- LibreChat アプリ登録を検索して選択します
- Delegated permissionsを選択します
access_as_userを選択します- Add permissions をクリックします
このガイドの後半で OPENID_SCOPE に完全な api://<client-id>/access_as_user スコープ値を使用してください。
ステップ 3: SharePoint の権限を追加する
ファイルピッカーインターフェースの場合:
- APIリストから SharePoint を選択します
- Delegated permissionsを選択します
- 検索して選択:
AllSites.Read- すべてのサイトコレクション内のアイテムを読み取る
- Add permissions をクリックします
ステップ 4: Microsoft Graph の権限を追加する
ファイルダウンロード用:
- もう一度 Add a permission をクリックします
- Microsoft Graph を選択します
- Delegated permissionsを選択します
- 検索して選択:
Files.Read.All- ユーザーがアクセス可能なすべてのファイルを読み取る
- Add permissions をクリックします
Step 5: 管理者の同意を付与する
- 権限を追加すると、それらがリストに表示されます
- [Your Organization] に管理者の同意を与える をクリックします
- ポップアップで同意を確認してください
権限は以下のようになっている必要があります:
| API / Permissions name | Type | Description | Status |
|---|---|---|---|
| Microsoft Graph - Files.Read.All | Delegated | ユーザーがアクセス可能なすべてのファイルを読み取る | ✅ Granted |
| SharePoint - AllSites.Read | Delegated | すべてのサイトコレクション内のアイテムを読み取る | ✅ Granted |
| LibreChat - access_as_user | Delegated | LibreChat が OBO 互換トークンを受信することを許可する | ✅ Granted |
環境設定
.env ファイルに以下の環境変数を追加してください:
# OpenID token reuse and OBO-compatible audience
OPENID_REUSE_TOKENS=true
OPENID_SCOPE=openid profile email offline_access api://<client-id>/access_as_user
OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true
# Enable SharePoint file picker
ENABLE_SHAREPOINT_FILEPICKER=true
# Your SharePoint tenant base URL
# Format: https://[your-tenant-name].sharepoint.com
SHAREPOINT_BASE_URL=https://contoso.sharepoint.com
# SharePoint scope for the file picker
# Replace 'contoso' with your actual tenant name
SHAREPOINT_PICKER_SHAREPOINT_SCOPE=https://contoso.sharepoint.com/AllSites.Read
# Microsoft Graph scope for file downloads
SHAREPOINT_PICKER_GRAPH_SCOPE=Files.Read.Allテナント名
上記の例にある contoso を、実際の SharePoint テナント名に置き換えてください。これは SharePoint の URL と完全に一致している必要があります。
OpenIDスコープのオーディエンス
<client-id> を、Azure アプリ登録のアプリケーション (クライアント) ID に置き換えてください。api://<client-id>/access_as_user スコープは、OBO アサーションに対して Azure にアプリ固有のオーディエンスを提供します。OPENID_SCOPE に標準の OpenID スコープのみが含まれている場合、Azure は SharePoint や Graph へのアクセスに再交換できない Graph オーディエンスのアクセストークンを発行する可能性があります。
Userinfoトークン交換
OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true を設定すると、LibreChat は OpenID の userinfo エンドポイントを呼び出す前に、アプリのオーディエンスアクセストークンを userinfo 互換のトークンと交換します。これは、OPENID_SCOPE に上記の LibreChat API スコープが含まれる Azure Entra ID のセットアップで必要となります。
仕組み
認証フロー
- ユーザーは Azure Entra ID を介して認証します
- SharePointピッカーにアクセスする際、LibreChatはユーザーのトークンをSharePointアクセス用に交換します。
- トークンは最適なパフォーマンスのためにキャッシュされます(通常50分間)。
- 個別のスコープにより、最小権限の原則が確実に守られます。
ファイル選択プロセス
- ユーザーが添付メニューの「From SharePoint」をクリックします
- SharePoint Online ファイルピッカーが埋め込み iframe で開きます
- ユーザーは使い慣れたSharePointインターフェースを使用してファイルを閲覧および選択します
- 選択されたファイルはダウンロード待ちです
ダウンロードプロセス
- ファイルはバッチ単位でダウンロードされます(最大3つまで同時にダウンロード可能)
- 進捗インジケーターは、現在のファイルと完了率を表示します
- ダウンロードされたファイルは会話に添付されます
- ダウンロードに失敗した場合は自動的に再試行されます
ユーザーエクスペリエンス
SharePoint ファイルへのアクセス
適切に設定されると、ユーザーはファイル添付メニューに新しいオプションが表示されるようになります:
- メッセージ入力欄の添付アイコンをクリックします
- メニューから「From SharePoint」を選択します
- SharePointファイルピッカーが開きます
- 必要に応じてファイルを参照して選択します
- 「Select」をクリックしてダウンロードを開始します
利用可能な機能
- 複数のファイル選択: 一度に最大10個のファイルを選択できます
- 馴染みのあるインターフェース: ネイティブのSharePointファイルピッカーを使用します
- 進捗状況の追跡: リアルタイムのダウンロード進捗状況を確認できます
- エラーハンドリング: 問題が発生した際の明確なメッセージ
- ローカライズ: 多言語に対応
セキュリティに関する考慮事項
アクセス制御
- ユーザーがSharePointでアクセス権限を持つファイルのみが利用可能です
- すべてのSharePoint権限およびポリシーを尊重します
- 昇格されたアクセス権やセキュリティ制御のバイパスはありません
トークンのセキュリティ
- トークン交換のために安全なon-behalf-ofフローを使用します
- トークンは短命であり、自動的に更新されます
- SharePoint認証情報の長期保存なし
Scope Isolation
- SharePointのスコープは読み取り操作のみに制限されています
- ファイル読み取りアクセスに制限されたGraph APIスコープ
- LibreChat を通じてファイルを変更または削除できません
トラブルシューティング
よくある問題
「From SharePoint」オプションが表示されない
原因: 機能が正しく有効化されていないか、認証の問題が発生しています
解決策:
.envでENABLE_SHAREPOINT_FILEPICKER=trueを確認してください。OPENID_REUSE_TOKENS=trueが設定されていることを確認してください- Azure Entra ID を介してユーザーが認証されていることを確認する
- 設定変更後にLibreChatを再起動する
ファイルピッカーが開かない
原因: 権限の不足または不適切
解決策:
- AzureでSharePointの権限が付与されていることを確認してください
- 管理者の同意が得られていることを確認してください
SHAREPOINT_BASE_URLがテナントと完全に一致していることを確認してください。SHAREPOINT_PICKER_SHAREPOINT_SCOPEが、https://contoso.sharepoint.com/AllSites.Readのような完全なテナントURLを使用していることを確認してください。- 本番環境でHTTPSが有効になっていることを確認する
ファイルピッカーが真っ白なページで開く
原因: Azureがオン・ビハーフ・オブ(on-behalf-of)交換を拒否している可能性があります。これは、OpenIDアクセストークンのオーディエンスが正しくないか、userinfoトークン交換が有効になっていないことが原因です。
解決策:
- Azureアプリの登録に、
api://<client-id>/access_as_userのような公開されたAPIスコープがあることを確認してください。 - そのフルスコープを
OPENID_SCOPEに追加してください。 OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=trueを設定します。- LibreChatを再起動し、再度サインインしてAzureが新しいOpenIDトークンを発行するようにしてください。
ダウンロードが失敗またはタイムアウトする
原因: Graph APIの権限またはネットワークの問題
解決策:
Files.Read.All権限が付与されていることを確認してください- SharePointへのネットワーク接続を確認する
- トークンが期限切れになっていないことを確認してください(必要に応じて再認証してください)
- ブラウザのコンソールで具体的なエラーメッセージを確認してください
デバッグモード
トラブルシューティングを行うには、デバッグログを有効にしてください:
DEBUG_LOGGING=true
DEBUG_CONSOLE=true以下は、詳細なログを提供します:
- トークン交換プロセス
- SharePoint および Graph への API 呼び出し
- ダウンロードの進捗とエラー
- 認証フロー
パフォーマンスの最適化
Token Caching
- 認証のオーバーヘッドを削減するためにトークンがキャッシュされます。
- キャッシュ期間はトークンの有効期間(通常50分)と一致します。
- 有効期限前の自動更新
同時ダウンロード
- 最大3つのファイルを同時にダウンロード
- ブラウザやサーバーへの過負荷を防ぎます
- 速度と安定性の両方を最適化します
ファイルサイズの考慮事項
- 大きなファイルはダウンロードに時間がかかる場合があります
- 進捗インジケーターは、ユーザーの期待値を管理するのに役立ちます。
- LibreChat設定におけるファイルアップロード制限を考慮してください
ベストプラクティス
管理者向け
- 定期的な権限監査: アプリの権限を定期的に見直してください
- 使用状況の監視: ログでSharePoint統合の使用状況を追跡します
- ドキュメントの更新: 内部ドキュメントをテナント固有の情報で最新の状態に保ってください
- 徹底的にテストする: Azure AD に変更を加えた後は、必ず機能を確認してください。
エンドユーザー向け
- ファイルの整理: 適切に整理されたSharePointライブラリは、ユーザーエクスペリエンスを向上させます
- ファイルサイズ: 会話の速度を低下させる可能性があるため、大きなファイルには注意してください。
- Permissions: ファイルを共有する前に、アクセス権があることを確認してください
- Patient Downloads: 複数または大きなファイルのダウンロードには時間を要します
高度な設定
カスタムスコープ
特定の要件を持つ組織向けに、スコープをカスタマイズすることができます:
# Example: Limiting to specific site collections
SHAREPOINT_PICKER_SHAREPOINT_SCOPE=https://contoso.sharepoint.com/sites/Engineering/AllSites.Read
# Example: Using more restrictive Graph permissions
SHAREPOINT_PICKER_GRAPH_SCOPE=Files.ReadInformation Barriers との統合
組織でInformation Barriersを使用している場合:
- SharePoint統合はすべてのバリアポリシーを尊重します
- ユーザーはアクセスを許可されたコンテンツのみを閲覧できます
- 追加の設定は不要です
関連ドキュメント
このガイドはいかがでしたか?