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

Vue d'ensemble

Comment configurer SAML pour LibreChat

Aperçu

SAML (Security Assertion Markup Language) est un protocole d'authentification largement utilisé qui permet l'authentification unique (SSO). Il permet aux utilisateurs de s'authentifier une seule fois auprès d'un fournisseur d'identité (IdP) et d'accéder à plusieurs services sans avoir à se reconnecter.

SLO (Single Logout) non pris en charge

La déconnexion unique (Single Logout - SLO) n'est pas prise en charge dans cette implémentation.

Exclusion mutuelle d'OpenID et de SAML

Si l'authentification OpenID est activée, l'authentification SAML sera automatiquement désactivée.

Une seule méthode d'authentification peut être active à la fois.

Activation de la méthode d'authentification basée sur les variables d'environnement

Le tableau suivant indique quelle méthode d'authentification est activée en fonction des paramètres des variables d'environnement :

OIDCSAMLMéthode d'authentification active
✅Activé❌DésactivéOpenID Connect (OIDC)
❌Désactivé✅ActivéSAML
✅Activé✅ActivéOpenID Connect (OIDC)
❌Désactivé❌DésactivéAucune authentification activée

Format et configuration du certificat SAML

La variable d'environnement SAML_CERT est utilisée pour spécifier le certificat de signature du fournisseur d'identité (IdP) afin de valider les réponses SAML. Ce certificat doit être fourni au format PEM et peut être spécifié de l'une des manières suivantes :

En tant que chemin de fichier (relatif ou absolu)

Si SAML_CERT est défini sur un chemin de fichier, l'application chargera le certificat à partir du fichier spécifié. Les chemins relatifs et les chemins absolus sont tous deux pris en charge.

# Relative path (resolved based on the application root)
SAML_CERT=idp-cert.pem

# Absolute path
SAML_CERT=/path/to/idp-cert.pem

Exemple de contenu de fichier (idp-cert.pem) :

-----BEGIN CERTIFICATE-----
MIIDazCCAlOgAwIBAgIUKhXaFJGJJPx466rl...
-----END CERTIFICATE-----

En tant que chaîne PEM sur une seule ligne

Le certificat peut également être fourni sous forme de chaîne PEM sur une seule ligne (encodée en Base64, sans sauts de ligne).

SAML_CERT="MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh...W=="

Ce format est utile lors du stockage du certificat directement dans les variables d'environnement.

En tant que chaîne PEM multiligne (avec séquences d'échappement \n)

Le certificat peut également être fourni sous forme de chaîne PEM multiligne où les retours à la ligne sont représentés par \n.

SAML_CERT="-----BEGIN CERTIFICATE-----\nMIIDazCCAlOgAwIBAgIUKhXaFJGJJPx466rl...\n-----END CERTIFICATE-----\n"

Ce format est utile lors de la configuration de certificats dans des fichiers .env tout en préservant la structure PEM complète.

Exigences de format de certificat

  • Le certificat doit toujours être au format PEM (certificat X.509 encodé en Base64).
  • S'il est fourni sous forme de fichier, il doit s'agir d'un format PEM de message textuel strict RFC7468 valide.
  • Lorsque vous utilisez un certificat sur une seule ligne, assurez-vous qu'il n'y a aucun saut de ligne dans la valeur.
  • Lorsque vous utilisez une chaîne multiligne, assurez-vous que les retours à la ligne sont représentés par des séquences d'échappement \n.

Pour plus de détails, consultez la documentation node-saml.

Flux de détermination du nom d'utilisateur affiché basé sur les attributs SAML

auth0-1

Dans l'authentification SAML, le nom d'utilisateur affiché est déterminé selon le flux suivant.

flowchart TD
    A[Start] --> B{{Is SAML_NAME_CLAIM available?}}
    B -- Yes --> C[Value of SAML_NAME_CLAIM]
    B -- No --> D{{Are both SAML_GIVEN_NAME_CLAIM & SAML_FAMILY_NAME_CLAIM available?}}
    D -- Yes --> E[Value of SAML_GIVEN_NAME_CLAIM / SAML_FAMILY_NAME_CLAIM]
    D -- No --> F{{Is only SAML_GIVEN_NAME_CLAIM available?}}
    F -- Yes --> G[Value of SAML_GIVEN_NAME_CLAIM]
    F -- No --> H{{Is only SAML_FAMILY_NAME_CLAIM available?}}
    H -- Yes --> I[Value of SAML_FAMILY_NAME_CLAIM]
    H -- No --> J{{Is SAML_USERNAME_CLAIM available?}}
    J -- Yes --> K[Value of SAML_USERNAME_CLAIM]
    J -- No --> L[Value of SAML_EMAIL_CLAIM]
    style C fill:#FFDEA5,stroke:#FFA500
    style E fill:#FFDEA5,stroke:#FFA500
    style G fill:#FFDEA5,stroke:#FFA500
    style I fill:#FFDEA5,stroke:#FFA500
    style K fill:#FFDEA5,stroke:#FFA500
    style L fill:#FFDEA5,stroke:#FFA500

Règles de détermination

  1. Si SAML_NAME_CLAIM est fourni, sa valeur est utilisée comme nom d'utilisateur affiché.
  2. Si SAML_GIVEN_NAME_CLAIM et SAML_FAMILY_NAME_CLAIM sont tous deux fournis, leurs valeurs correspondantes sont concaténées pour former le nom d'utilisateur.
  3. Si seul SAML_GIVEN_NAME_CLAIM est fourni, sa valeur est utilisée.
  4. Si seul SAML_FAMILY_NAME_CLAIM est fourni, sa valeur est utilisée.
  5. Si SAML_USERNAME_CLAIM est fourni, sa valeur est utilisée.
  6. Si aucun des attributs ci-dessus n'est fourni, SAML_EMAIL_CLAIM est utilisé comme nom d'utilisateur affiché.

En suivant ce flux, un nom d'utilisateur approprié est déterminé lors de l'authentification SAML.

Exemples de configuration

Que pensez-vous de ce guide ?