All 181 docs markdown files translated into 20 languages (apps/docs/<locale>/**). Companion to the i18n code PR; admin-merged because the file count exceeds GitHub's per-PR CI trigger limit. Validated by pnpm i18n:check (all surfaces, 0 stale/missing) and a clean all-locale docs build.
13 KiB
description, i18n_source_hash, i18n_provenance, i18n_output_hash
| description | i18n_source_hash | i18n_provenance | i18n_output_hash |
|---|---|---|---|
| Konfigurera SAML 2.0 Single Sign-On för SnapOtter. Steg-för-steg-guider för Okta, Azure AD / Entra ID, Google Workspace och andra SAML-identitetsleverantörer. | 33dfb8b02a22 | human | 97815624f357 |
SAML SSO
SnapOtter stöder SAML 2.0 för single sign-on. Användare kan logga in via en extern identitetsleverantör (Okta, Azure AD / Entra ID, Google Workspace eller vilken standard-SAML 2.0-IdP som helst) i stället för lokal autentisering med användarnamn/lösenord.
::: tip Enterprise-funktion
SAML SSO kräver en team- eller enterprise-licens med funktionen saml_sso. Om SAML_ENABLED=true är satt utan en giltig licens hoppas SAML-rutterna tyst över och en varning loggas.
:::
Förutsättningar
- En körande SnapOtter-instans nåbar på en publik URL
EXTERNAL_URLsatt till den publika URL:n (t.ex.https://photos.example.com)- En team- eller enterprise-licensnyckel med funktionen
saml_sso - Administratörsåtkomst till din SAML-identitetsleverantör
Snabbstart
Lägg till dessa miljövariabler i din docker-compose.yml:
services:
snapotter:
image: snapotter/snapotter:latest
environment:
EXTERNAL_URL: "https://photos.example.com"
SNAPOTTER_LICENSE_KEY: "your-license-key"
SAML_ENABLED: "true"
SAML_IDP_SSO_URL: "https://idp.example.com/sso/saml"
SAML_IDP_CERTIFICATE: |
MIICpDCCAYwCCQDU+pQ4pHgSpDANBgkqhkiG9w0BAQsFADAUMRIw
...your IdP's signing certificate in PEM format...
EAYHKoZIzj0CAQYFK4EEACIDYgAE
Starta om containern. En "Logga in med SAML"-knapp (eller etiketten satt av SAML_PROVIDER_NAME) visas på inloggningssidan.
Konfigurationsreferens
| Variabel | Standard | Beskrivning |
|---|---|---|
SAML_ENABLED |
false |
Aktivera SAML-inloggning. |
SAML_IDP_SSO_URL |
IdP:ns SSO-slutpunkts-URL. Krävs när SAML är aktiverat. | |
SAML_IDP_CERTIFICATE |
IdP:ns X.509-signeringscertifikat i PEM-format (själva certifikattexten, inte en filsökväg). Krävs när SAML är aktiverat. | |
EXTERNAL_URL |
Den publika URL där SnapOtter är nåbar. Krävs när SAML är aktiverat. | |
SAML_ENTITY_ID |
${EXTERNAL_URL}/api/auth/saml/metadata |
SP Entity ID / Audience URI som skickas till IdP:n. |
SAML_CALLBACK_URL |
${EXTERNAL_URL}/api/auth/saml/callback |
Assertion Consumer Service (ACS)-URL. |
SAML_AUTO_CREATE_USERS |
true |
Skapa automatiskt ett lokalt användarkonto vid första SAML-inloggningen. |
SAML_AUTO_LINK_USERS |
false |
Länka en SAML-identitet till en befintlig lokal användare om e-postadressen matchar. |
SAML_DEFAULT_ROLE |
user |
Roll som tilldelas automatiskt skapade SAML-användare. En av admin, editor eller user. |
SAML_PROVIDER_NAME |
Visningsetikett för SAML-inloggningsknappen i frontend (t.ex. "Okta", "Azure AD"). Om tomt står det "SAML" på knappen. | |
SAML_USERNAME_ATTRIBUTE |
SAML-assertion-attribut som används som användarnamn. Om tomt faller det tillbaka till e-postadressens lokala del, sedan NameID. | |
SAML_EMAIL_ATTRIBUTE |
email |
SAML-assertion-attribut som används som användarens e-postadress. |
Servern vägrar att starta om SAML_ENABLED=true och någon av de tre obligatoriska variablerna (SAML_IDP_SSO_URL, SAML_IDP_CERTIFICATE, EXTERNAL_URL) saknas.
::: details Säkerhetsanteckningar
Både wantAuthnResponseSigned och wantAssertionsSigned är hårdkodade till true. SnapOtter avvisar osignerade eller felaktigt signerade SAML-svar. Assertions från en betrodd IdP behandlas som e-postverifierade.
Endast SP-initierad inloggning stöds. SnapOtter stöder inte IdP-initierad (oombedd) inloggning eller Single Logout (SLO). Att logga ut från SnapOtter loggar inte ut användaren från IdP:n. :::
SP-metadata och URL:er
Din IdP behöver tre värden från SnapOtter:
| Fält | Värde |
|---|---|
| ACS-URL (Assertion Consumer Service) | ${EXTERNAL_URL}/api/auth/saml/callback |
| Entity ID / Audience URI | ${EXTERNAL_URL}/api/auth/saml/metadata |
| SP Metadata (XML) | GET ${EXTERNAL_URL}/api/auth/saml/metadata |
Om till exempel EXTERNAL_URL är https://photos.example.com:
- ACS-URL:
https://photos.example.com/api/auth/saml/callback - Entity ID:
https://photos.example.com/api/auth/saml/metadata - Metadata-slutpunkt:
https://photos.example.com/api/auth/saml/metadata(returnerar XML)
Vissa IdP:er kan importera SP-metadata-URL:n direkt, vilket automatiskt fyller i ACS-URL:n och Entity ID.
Leverantörskonfiguration
Okta
- I Okta-administratörskonsolen, gå till Applications > Create App Integration.
- Välj SAML 2.0 och klicka på Next.
- Ange ett namn (t.ex. "SnapOtter") och klicka på Next.
- Konfigurera SAML-inställningarna:
- Single sign-on URL: Din ACS-URL (t.ex.
https://photos.example.com/api/auth/saml/callback) - Audience URI (SP Entity ID): Ditt Entity ID (t.ex.
https://photos.example.com/api/auth/saml/metadata) - Name ID format: EmailAddress
- Application username: Email
- Single sign-on URL: Din ACS-URL (t.ex.
- Under Attribute Statements, lägg till
emailmappat tilluser.email. - Klicka på Next, sedan Finish.
- Gå till fliken Sign On, klicka på View SAML setup instructions och kopiera:
- Identity Provider Single Sign-On URL till
SAML_IDP_SSO_URL - X.509 Certificate till
SAML_IDP_CERTIFICATE
- Identity Provider Single Sign-On URL till
Azure AD / Entra ID
- I Azure-portalen, gå till Microsoft Entra ID > Enterprise applications > New application.
- Klicka på Create your own application, döp den till "SnapOtter" och välj Integrate any other application you don't find in the gallery.
- Gå till Single sign-on > SAML och klicka på Edit i avsnittet Basic SAML Configuration:
- Identifier (Entity ID): Ditt Entity ID (t.ex.
https://photos.example.com/api/auth/saml/metadata) - Reply URL (ACS URL): Din ACS-URL (t.ex.
https://photos.example.com/api/auth/saml/callback)
- Identifier (Entity ID): Ditt Entity ID (t.ex.
- Under SAML Certificates, ladda ner Certificate (Base64).
- Under Set up SnapOtter, kopiera Login URL.
- Sätt
SAML_IDP_SSO_URLtill Login-URL:n ochSAML_IDP_CERTIFICATEtill innehållet i det nedladdade certifikatet. - Tilldela användare eller grupper till applikationen under Users and groups.
Google Workspace
- I Google Admin-konsolen, gå till Apps > Web and mobile apps > Add app > Add custom SAML app.
- Döp appen till "SnapOtter" och klicka på Continue.
- På sidan Google Identity Provider details, kopiera SSO URL och ladda ner Certificate. Klicka på Continue.
- Konfigurera Service Provider-detaljerna:
- ACS URL: Din ACS-URL (t.ex.
https://photos.example.com/api/auth/saml/callback) - Entity ID: Ditt Entity ID (t.ex.
https://photos.example.com/api/auth/saml/metadata) - Name ID format: EMAIL
- Name ID: Basic Information > Primary email
- ACS URL: Din ACS-URL (t.ex.
- Klicka på Continue, sedan Finish.
- Slå PÅ appen för dina organisationsenheter.
- Sätt
SAML_IDP_SSO_URLtill SSO-URL:n från steg 3 ochSAML_IDP_CERTIFICATEtill innehållet i det nedladdade certifikatet.
Generisk SAML 2.0-IdP
För vilken SAML 2.0-kompatibel identitetsleverantör som helst:
- Skapa en ny SAML-applikation/tjänsteleverantör i din IdP.
- Sätt ACS-URL till
${EXTERNAL_URL}/api/auth/saml/callback. - Sätt Entity ID / Audience till
${EXTERNAL_URL}/api/auth/saml/metadata. - Konfigurera IdP:n att skicka användarens e-post i ett attribut med namnet
email(eller sättSAML_EMAIL_ATTRIBUTEför att matcha din IdP:s attributnamn). - Kopiera IdP SSO URL och signeringscertifikat till
SAML_IDP_SSO_URLochSAML_IDP_CERTIFICATE.
Användarprovisionering
Skapa automatiskt
När SAML_AUTO_CREATE_USERS är true (standard) skapas ett lokalt användarkonto första gången någon loggar in via SAML. Rollen sätts till SAML_DEFAULT_ROLE.
Användarnamnet härleds i denna ordning:
- Värdet av assertion-attributet som anges av
SAML_USERNAME_ATTRIBUTE(om det är satt och finns) - Den lokala delen av e-postadressen (allt före
@) - SAML NameID
Om en användarnamnskollision uppstår läggs ett numeriskt suffix till (t.ex. jane blir jane_2).
Länka automatiskt
När SAML_AUTO_LINK_USERS är true länkar SnapOtter en SAML-identitet till ett befintligt lokalt konto om e-postadresserna matchar. Detta är användbart när du har förskapade användarkonton och vill att de ska börja använda SSO utan att förlora sina data.
::: warning Aktivera endast automatisk länkning om du litar på att din SAML-IdP verifierar e-postadresser. En overifierad e-postadress från en felkonfigurerad IdP kan tillåta någon att ta över en annan användares konto. :::
Attributmappning
| SnapOtter-fält | Källa | Konfiguration |
|---|---|---|
| E-post | Assertion-attribut | SAML_EMAIL_ATTRIBUTE (standard: email) |
| Användarnamn | Assertion-attribut, e-post eller NameID | SAML_USERNAME_ATTRIBUTE (se härledningsordning ovan) |
| Externt ID | NameID | Alltid SAML NameID, inte konfigurerbart |
Framtvingande av SSO
Om du vill kräva att alla användare loggar in via SAML (eller OIDC) och blockera lokal lösenordsinloggning, aktiverar du framtvingande av SSO:
- Säkerställ att enterprise-funktionen
sso_enforcementär licensierad (tillgänglig på team- och enterprise-planer). - I Admin Settings > Security, slå på SSO Enforcement.
- Sätt ett break-glass-användarnamn: detta är det enda lokala konto som fortfarande kan logga in med ett lösenord, för nödåtkomst om IdP:n är onåbar.
När framtvingande av SSO är aktivt returnerar varje lokalt inloggningsförsök (utom för break-glass-användaren) ett 403-fel med meddelandet "Local password login is disabled. Please use SSO."
::: tip Konfigurera alltid ett break-glass-användarnamn innan du aktiverar framtvingande av SSO. Utan det kan du bli utelåst från SnapOtter om din IdP går ner. :::
Använda SAML tillsammans med OIDC
SAML och OIDC kan aktiveras samtidigt. När båda är aktiva visar inloggningssidan separata knappar för varje leverantör (märkta med SAML_PROVIDER_NAME och OIDC_PROVIDER_NAME). Användare kan logga in med endera metoden.
Båda leverantörerna delar samma inställningar för automatiskt skapande, automatisk länkning och framtvingande av SSO oberoende av varandra: var och en har sina egna *_AUTO_CREATE_USERS-, *_AUTO_LINK_USERS- och *_DEFAULT_ROLE-variabler.
Felsökning
Assertion-validering misslyckades
Signaturen på SAML-svaret eller assertion-signaturen kunde inte verifieras. Kontrollera:
- Certifikatet i
SAML_IDP_CERTIFICATEmatchar det aktuella signeringscertifikatet i din IdP (certifikat roteras, så kontrollera utgångsdatum) - Certifikatet är i PEM-format (börjar med
-----BEGIN CERTIFICATE-----) - Certifikatet är den fullständiga texten, inte en filsökväg
- ACS-URL:n och Entity ID som konfigurerats i din IdP matchar SnapOtters värden exakt (schema, värd, port, sökväg)
Saknade attribut
Om användarnamn eller e-postadresser är tomma efter inloggning kanske din IdP inte skickar de förväntade attributen. Kontrollera:
- Din IdP är konfigurerad att släppa ett
email-attribut (eller vadSAML_EMAIL_ATTRIBUTEär satt till) - Om du använder
SAML_USERNAME_ATTRIBUTE, verifiera att det attributet ingår i assertionen - Vissa IdP:er kräver uttrycklig attributmappningskonfiguration innan de släpper claims
Klockavvikelse
SAML-assertions inkluderar tidsstämpelvillkor (NotBefore, NotOnOrAfter). Om din serverklocka och IdP-klockan inte är synkroniserade misslyckas assertion-valideringen. Kör NTP på båda maskinerna för att hålla klockorna i linje.
"SAML is enabled via env but saml_sso enterprise feature is not licensed"
Denna varning visas i serverloggarna när SAML_ENABLED=true men licensen inte inkluderar funktionen saml_sso. Verifiera din licensnyckel och plan. Funktionen saml_sso är tillgänglig på team- och enterprise-planer.
Inloggning omdirigerar tillbaka med fel
Om ett klick på SAML-inloggningsknappen omdirigerar tillbaka till inloggningssidan med ett fel, kontrollera serverloggarna för detaljer. Vanliga orsaker:
- IdP:ns SSO-URL är onåbar från servern
- IdP:n avvisade autentiseringsbegäran (kontrollera IdP:ns granskningsloggar)
- IdP:n returnerade ett osignerat svar (SnapOtter kräver att både svaret och assertionen är signerade)