OpenID Connect トークンの再利用
LibreChatでOpenID Connectのトークン再利用を設定する方法
LibreChatは、ユーザー認証状態を管理するために、OpenID Connectプロバイダー(Azure Entra IDやAuth0など)によって発行されたアクセストークンおよびリフレッシュトークンの再利用をサポートしています。この機能が有効な場合、クッキーとしてユーザーに渡されるリフレッシュトークンはLibreChatではなくOpenIDプロバイダーによって発行されるため、LibreChatサーバーはそれをリフレッシュし、プロバイダーからアクセストークンを要求できるようになります。
前提条件
- 設定済みのOpenID Connectプロバイダー(Azure Entra ID、Auth0など)
- 基本的なOpenID Connectのセットアップが完了しました
設定手順
- 環境変数に
OPENID_REUSE_TOKENS=trueを設定してください。
プロバイダー固有の設定
Auth0 設定
Auth0にとって重要
Auth0をトークン再利用(token reuse)で使用する場合、OPENID_AUDIENCE環境変数を必ず設定する必要があります。これを設定しないと、Auth0はLibreChatで検証できない不透明なトークンを返し、無限リフレッシュループが発生します。
Auth0 の場合は、以下を行う必要があります:
-
Auth0でAPIを作成します(JWTアクセストークンに必要です):
- Auth0 Dashboard → Applications → APIs に移動します。
- "Create API" をクリックします
- Identifier(例:
https://api.librechat.com)を設定します。 - API設定で "Allow Offline Access" を有効にします
-
必要な環境変数を設定します:
Auth0の詳細な設定については、以下を参照してください: Auth0 OpenID Connect Configuration
Azure Entra ID の設定
- OpenIDプロバイダーを設定します(例としてAzure Entra IDを使用):
- Azure Portalにアクセスし、アプリの登録(app registration)に移動します。
- 左側のメニューにある「Expose API」をクリックします
- 「Application ID URI」の横にある「Add」をクリックします
- API URI(例: "api://librechat")を入力して保存します。
- APIスコープを作成する:
- 「Expose API」セクションで、「Add a scope」をクリックします。
- 適切な権限でスコープを設定します
- スコープ設定を保存
- API権限の設定:
- 左側のメニューにある「API permissions」に移動します
- 「Add a permission」をクリックします
- 「APIs my organization uses」の下で、アプリを検索してください
- 「Delegated permissions」を選択し、適切なスコープ(例: 「access_user」)を選択します。
-
環境内で必要なスコープを設定します:
注: リフレッシュトークンを再利用できるようにするには、
offline_accessスコープが必要です。 -
管理者同意を付与:
- Azure Portalの「エンタープライズ アプリケーション (Enterprise Applications)」に移動します
- LibreChat アプリケーションを見つける
- Security > Permissions に移動します
- 「Grant admin consent」をクリックします
- ポップアップで要求された権限を許可してください
- LibreChatのキャッシュをクリアして、サービスを再起動します。
Microsoft Graph API 統合
トークン再利用で Azure Entra ID を使用する場合、Microsoft Graph API 統合を有効にして、ユーザーやグループの検索機能を強化することもできます。詳細については、Microsoft Graph API 統合を参照してください。
環境変数
追加の設定オプション
OPENID_AUDIENCE: JWT検証および認可リクエストのためのオーディエンス値。Auth0で必須であり、不透明トークンではなくJWTアクセストークンを受け取るために必要です。JWT検証にはカンマ区切りの値を使用でき、認可リクエストには最初の空でない値が使用されます。OPENID_REUSE_MAX_SESSION_AGE_MS: 再利用されたOpenIDセッショントークンが、LibreChatによってIdPの強制リフレッシュが行われるまでに提供される最大有効期間(デフォルト: 900000 ms / 15分)。60 * 60 * 24 * 1000のような算術式を受け付けます。プロバイダーがリフレッシュのたびに以前のアクセストークンを無効化する場合は、IdPのアクセストークンの有効期間に合わせてこの値を大きくしてください。OPENID_JWKS_URL_CACHE_ENABLED: JWKS endpointへの過度なHTTPリクエストを防ぐため、署名鍵の検証結果のキャッシュを有効にします。OPENID_JWKS_URL_CACHE_TIME: キャッシュの保持期間(ミリ秒単位、デフォルト: 600000 ms / 10分)OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED: ユーザー情報取得のために on-behalf-of フローを有効にします(Azure 固有)OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE: On-behalf-ofフローにおけるユーザー情報のスコープ(Azure固有)OPENID_USE_END_SESSION_ENDPOINT: ログアウト時にエンドセッションエンドポイントを使用することを有効にします
セキュリティに関する考慮事項
- 適切なトークンの保存と取り扱いを確実にしてください
- 適切なトークン更新メカニズムを実装する
- トークン使用量を監視し、必要に応じてレート制限を実装してください。
- クライアントシークレットを定期的にローテーションする
- トークンストレージにはセキュアなクッキー設定を使用してください
トラブルシューティング
トークンの再利用で問題が発生した場合:
- 必要なすべてのスコープが適切に設定されていることを確認してください
- 管理者の同意が付与されていることを確認してください
- API権限が正しく設定されていることを確認してください
- トークンキャッシュが期待通りに動作していることを確認する
- アプリケーションログで認証エラーが発生していないか確認してください
- 環境変数に
DEBUG_OPENID_REQUESTS=trueを設定して詳細なOpenIDリクエストヘッダーのログ出力を有効にすると、URLに加えてリクエストヘッダーを確認できるようになります(機密データはマスクされます)。
このガイドはいかがでしたか?