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:
| OIDC | SAML | Aktywna metoda uwierzytelniania |
|---|---|---|
| ✅Włączone | ❌Wyłączone | OpenID Connect (OIDC) |
| ❌Wyłączone | ✅Włączone | SAML |
| ✅Włączone | ✅Włączone | OpenID Connect (OIDC) |
| ❌Wyłączone | ❌Wyłączone | Brak 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.pemPrzykł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

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:#FFA500Zasady określania
- Jeśli podano
SAML_NAME_CLAIM, jego wartość jest używana jako wyświetlana nazwa użytkownika. - Jeśli podano zarówno
SAML_GIVEN_NAME_CLAIM, jak iSAML_FAMILY_NAME_CLAIM, ich odpowiadające im wartości są łączone w celu utworzenia nazwy użytkownika. - Jeśli podano tylko
SAML_GIVEN_NAME_CLAIM, używana jest jego wartość. - Jeśli podano tylko
SAML_FAMILY_NAME_CLAIM, używana jest jego wartość. - Jeśli podano
SAML_USERNAME_CLAIM, używana jest jego wartość. - Jeśli żaden z powyższych atrybutów nie zostanie podany,
SAML_EMAIL_CLAIMjest 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?