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

Vue d'ensemble

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 des 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 sauts de ligne sont reprĂ©sentĂ©s par des sĂ©quences d'Ă©chappement \n.

Pour plus de détails, consultez la documentation de 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 ?