Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Réutilisation de jeton OpenID Connect

Comment configurer la réutilisation des jetons OpenID Connect avec LibreChat

LibreChat prend en charge la réutilisation des jetons d'accès et de rafraîchissement émis par votre fournisseur OpenID Connect (comme Azure Entra ID ou Auth0) pour gérer l'état d'authentification des utilisateurs. Lorsque cette fonctionnalité est active, le jeton de rafraîchissement transmis à l'utilisateur sous forme de cookie est émis par votre fournisseur OpenID au lieu de LibreChat, permettant aux serveurs LibreChat de le rafraîchir et de demander des jetons d'accès auprès de votre fournisseur.

Prérequis

  • Un fournisseur OpenID Connect configuré (comme Azure Entra ID, Auth0, etc.)
  • Configuration de base OpenID Connect terminée

Étapes de configuration

  1. Définissez OPENID_REUSE_TOKENS=true dans vos variables d'environnement.

Configuration spécifique au fournisseur

Configuration Auth0

Important pour Auth0

Lorsque vous utilisez Auth0 avec la réutilisation de jetons, vous devez configurer la variable d'environnement OPENID_AUDIENCE. Sans cela, Auth0 renverra des jetons opaques qui ne pourront pas être validés par LibreChat, provoquant des boucles de rafraîchissement infinies.

Pour Auth0, vous devez :

  1. Créer une API dans Auth0 (requis pour les jetons d'accès JWT) :

    • Allez dans Auth0 DashboardApplicationsAPIs
    • Cliquez sur "Create API"
    • Définissez un Identifier (par ex. https://api.librechat.com)
    • Activez "Allow Offline Access" dans les paramètres de l'API
  2. Définissez les variables d'environnement requises :

    # Required for Auth0
    OPENID_AUDIENCE=https://api.librechat.com  # Your API identifier from Auth0
    OPENID_SCOPE=openid profile email offline_access

Pour une configuration détaillée d'Auth0, consultez : Configuration OpenID Connect d'Auth0

Configuration d'Azure Entra ID

  1. Configurez votre fournisseur OpenID (en utilisant Azure Entra ID comme exemple) :
    • Allez sur le portail Azure et accédez à votre inscription d'application
    • Cliquez sur "Expose API" dans le menu de gauche
    • Cliquez sur "Add" à côté de "Application ID URI"
    • Entrez votre URI d'API (par ex. "api://librechat") et enregistrez

image

  1. Créer une portée d'API :
    • Dans la section "Expose API", cliquez sur "Add a scope"
    • Configurez la portée avec les autorisations appropriées
    • Enregistrer la configuration de la portée

image

  1. Configurer les permissions de l'API :
    • Allez dans "API permissions" dans le menu de gauche
    • Cliquez sur "Add a permission"
    • Sous « APIs my organization uses », recherchez votre application
    • Sélectionnez "Delegated permissions" et choisissez la portée appropriée (par exemple, "access_user")

image

image

image

  1. Définissez la portée requise dans votre environnement :

    OPENID_SCOPE=api://librechat/.default openid profile email offline_access

    Remarque : La portée offline_access est requise pour obtenir un jeton de rafraîchissement à des fins de réutilisation.

  2. Accorder le consentement administrateur :

    • Allez dans Enterprise Applications dans le portail Azure
    • Trouvez votre application LibreChat
    • Accédez à Security > Permissions
    • Cliquez sur "Grant admin consent"

image

  1. Acceptez les autorisations demandées dans la fenêtre contextuelle

image

  1. Videz le cache de LibreChat et redémarrez le service.

Intégration de l'API Microsoft Graph

Lorsque vous utilisez Azure Entra ID avec la réutilisation de jetons, vous pouvez également activer l'intégration de l'API Microsoft Graph pour des capacités de recherche de personnes et de groupes améliorées. Voir Intégration de l'API Microsoft Graph pour plus de détails.

Variables d'environnement

# OpenID Token Reuse Configuration
OPENID_REUSE_TOKENS=true
OPENID_SCOPE=api://librechat/.default openid profile email offline_access
OPENID_REUSE_MAX_SESSION_AGE_MS=900000  # 15 minutes in milliseconds
 
# Required for Auth0 (use your API identifier)
# OPENID_AUDIENCE=https://api.librechat.com
 
# Caching Configuration
OPENID_JWKS_URL_CACHE_ENABLED=true
OPENID_JWKS_URL_CACHE_TIME=600000  # 10 minutes in milliseconds
 
# Azure-specific Configuration
OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED=true
OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE=user.read
 
# Logout Configuration
OPENID_USE_END_SESSION_ENDPOINT=true

Options de configuration supplémentaires

  • OPENID_AUDIENCE : Valeur d'audience pour la validation JWT et les requêtes d'autorisation. Requis pour Auth0 afin de recevoir des jetons d'accès JWT au lieu de jetons opaques. Les valeurs séparées par des virgules sont acceptées pour la validation JWT ; les requêtes d'autorisation utilisent la première valeur non vide.
  • OPENID_REUSE_MAX_SESSION_AGE_MS : Âge maximal auquel un jeton de session OpenID réutilisé est servi avant que LibreChat ne force un rafraîchissement auprès de l'IdP (par défaut : 900000 ms / 15 minutes). Accepte les expressions arithmétiques comme 60 * 60 * 24 * 1000. Augmentez cette valeur pour qu'elle corresponde à la durée de vie du jeton d'accès de votre IdP si votre fournisseur révoque le jeton d'accès précédent à chaque rafraîchissement.
  • OPENID_JWKS_URL_CACHE_ENABLED : Active la mise en cache des résultats de vérification des clés de signature pour éviter les requêtes HTTP excessives vers l'endpoint JWKS
  • OPENID_JWKS_URL_CACHE_TIME : Durée du cache en millisecondes (par défaut : 600000 ms / 10 minutes)
  • OPENID_ON_BEHALF_FLOW_FOR_USERINFO_REQUIRED : Active le flux « on-behalf-of » pour les informations utilisateur (spécifique à Azure)
  • OPENID_ON_BEHALF_FLOW_USERINFO_SCOPE : Portée (scope) pour les informations utilisateur dans le flux on-behalf-of (spécifique à Azure)
  • OPENID_USE_END_SESSION_ENDPOINT : Active l'utilisation de l'endpoint de fin de session pour la déconnexion

Considérations de sécurité

  • Assurer un stockage et une gestion appropriés des jetons
  • Implémenter des mécanismes de rafraîchissement de jeton appropriés
  • Surveillez l'utilisation des jetons et implémentez une limitation de débit si nécessaire
  • Renouveler régulièrement les secrets client
  • Utilisez des paramètres de cookie sécurisés pour le stockage des jetons

Dépannage

Si vous rencontrez des problèmes avec la réutilisation de jetons :

  1. Vérifiez que toutes les portées (scopes) requises sont correctement configurées
  2. Vérifiez que le consentement de l'administrateur a été accordé
  3. Assurez-vous que les permissions de l'API sont correctement configurées
  4. Vérifiez que le cache de jetons fonctionne comme prévu
  5. Vérifiez les journaux de l'application pour toute erreur d'authentification
  6. Activez la journalisation détaillée des en-têtes de requête OpenID en définissant DEBUG_OPENID_REQUESTS=true dans vos variables d'environnement pour voir les en-têtes de requête en plus des URLs (avec les données sensibles masquées).

Que pensez-vous de ce guide ?