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

Przegląd

Jak skonfigurować SAML dla LibreChat

Przegląd

SAML (Security Assertion Markup Language) to szeroko stosowany protokół uwierzytelniania, który umożliwia logowanie jednokrotne (Single Sign-On, SSO). Pozwala on użytkownikom na jednokrotne uwierzytelnienie się u dostawcy tożsamości (Identity Provider, IdP) i uzyskanie dostępu do wielu usług bez konieczności ponownego logowania.

SLO (Single Logout) nie jest obsługiwane

Single Logout (SLO) nie jest obsługiwane w tej implementacji.

Wzajemne wykluczenie OpenID i SAML

Jeśli uwierzytelnianie OpenID jest włączone, uwierzytelnianie SAML zostanie automatycznie wyłączone.

Tylko jedna metoda uwierzytelniania może być aktywna w danym momencie.

Aktywacja metody uwierzytelniania na podstawie zmiennych środowiskowych

Poniższa tabela wskazuje, która metoda uwierzytelniania jest włączona w zależności od ustawień zmiennych środowiskowych:

OIDCSAMLAktywna metoda uwierzytelniania
✅Włączone❌WyłączoneOpenID Connect (OIDC)
❌Wyłączone✅WłączoneSAML
✅Włączone✅WłączoneOpenID Connect (OIDC)
❌Wyłączone❌WyłączoneBrak włączonego uwierzytelniania

Format i konfiguracja certyfikatu SAML

Zmienna środowiskowa SAML_CERT służy do określenia certyfikatu podpisywania dostawcy tożsamości (IdP) w celu weryfikacji odpowiedzi SAML. Certyfikat ten musi zostać dostarczony w formacie PEM i może zostać określony na jeden z poniższych sposobów:

Jako ścieżka pliku (względna lub bezwzględna)

Jeśli SAML_CERT jest ustawione na ścieżkę do pliku, aplikacja wczyta certyfikat ze wskazanego pliku. Obsługiwane są zarówno ścieżki względne, jak i ścieżki bezwzględne.

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

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

Przykładowa zawartość pliku (idp-cert.pem):

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

Jako jednowierszowy ciąg PEM

Certyfikat można również dostarczyć jako jednoliniowy ciąg PEM (zakodowany w Base64, bez znaków nowej linii).

SAML_CERT="MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh...W=="

Ten format jest przydatny podczas przechowywania certyfikatu bezpośrednio w zmiennych środowiskowych.

Jako wieloliniowy ciąg PEM (z sekwencjami ucieczki \n)

Certyfikat można również dostarczyć jako wieloliniowy ciąg PEM, w którym znaki nowej linii są reprezentowane jako \n.

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

Ten format jest przydatny podczas konfigurowania certyfikatów w plikach .env przy jednoczesnym zachowaniu pełnej struktury PEM.

Wymagania dotyczące formatu certyfikatu

  • Certyfikat musi być zawsze w formacie PEM (certyfikat X.509 zakodowany w Base64).
  • Jeśli zostanie dostarczony jako plik, musi być w poprawnym formacie RFC7468 strict textual message PEM.
  • Podczas używania certyfikatu jednowierszowego upewnij się, że w wartości nie ma znaków nowej linii.
  • Podczas używania wieloliniowego ciągu znaków upewnij się, że znaki nowej linii są reprezentowane jako sekwencje ucieczki \n.

Aby uzyskać więcej szczegółów, zapoznaj się z dokumentacją node-saml.

Przepływ ustalania wyświetlanej nazwy użytkownika na podstawie atrybutów SAML

auth0-1

W uwierzytelnianiu SAML wyświetlana nazwa użytkownika jest określana zgodnie z poniższym przepływem.

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

Zasady określania

  1. Jeśli podano SAML_NAME_CLAIM, jego wartość jest używana jako wyświetlana nazwa użytkownika.
  2. Jeśli podano zarówno SAML_GIVEN_NAME_CLAIM, jak i SAML_FAMILY_NAME_CLAIM, ich odpowiadające im wartości są łączone w celu utworzenia nazwy użytkownika.
  3. Jeśli podano tylko SAML_GIVEN_NAME_CLAIM, używana jest jego wartość.
  4. Jeśli podano tylko SAML_FAMILY_NAME_CLAIM, używana jest jego wartość.
  5. Jeśli podano SAML_USERNAME_CLAIM, używana jest jego wartość.
  6. Jeśli żaden z powyższych atrybutów nie zostanie podany, SAML_EMAIL_CLAIM jest używany jako wyświetlana nazwa użytkownika.

Postępując zgodnie z tym przepływem, odpowiednia nazwa użytkownika jest określana podczas uwierzytelniania SAML.

Przykłady konfiguracji

Jaka jest ta instrukcja?