mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
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.
171 lines
8.7 KiB
Markdown
171 lines
8.7 KiB
Markdown
---
|
|
description: "Skonfiguruj logowanie jednokrotne z OpenID Connect. Przewodniki krok po kroku dla Keycloak, Authentik, Google i innych dostawców OIDC."
|
|
i18n_source_hash: 4296343b3cc5
|
|
i18n_provenance: human
|
|
i18n_output_hash: 0a980a795fc3
|
|
---
|
|
|
|
# OIDC / Logowanie jednokrotne {#oidc-single-sign-on}
|
|
|
|
SnapOtter obsługuje OpenID Connect (OIDC) do logowania jednokrotnego. Użytkownicy mogą logować się za pomocą zewnętrznego dostawcy tożsamości, takiego jak Keycloak, Authentik czy Google, zamiast (lub obok) lokalnego uwierzytelniania nazwą użytkownika i hasłem.
|
|
|
|
::: tip Zobacz też
|
|
[SAML SSO](/pl/guide/saml) | [Provisioning SCIM](/pl/guide/scim) | [Użytkownicy, role i uprawnienia](/pl/guide/users-roles)
|
|
:::
|
|
|
|
## Szybki start {#quick-start}
|
|
|
|
Dodaj te zmienne środowiskowe do swojego `docker-compose.yml`:
|
|
|
|
```yaml
|
|
services:
|
|
SnapOtter:
|
|
image: snapotter/snapotter:latest
|
|
environment:
|
|
EXTERNAL_URL: "https://photos.example.com"
|
|
OIDC_ENABLED: "true"
|
|
OIDC_ISSUER_URL: "https://auth.example.com/realms/myrealm"
|
|
OIDC_CLIENT_ID: "snapotter"
|
|
OIDC_CLIENT_SECRET: "your-secret-here"
|
|
```
|
|
|
|
URI przekierowania dla Twojego dostawcy zawsze wynosi:
|
|
|
|
```
|
|
${EXTERNAL_URL}/api/auth/oidc/callback
|
|
```
|
|
|
|
Na przykład, jeśli `EXTERNAL_URL` to `https://photos.example.com`, skonfiguruj URI przekierowania dostawcy jako `https://photos.example.com/api/auth/oidc/callback`.
|
|
|
|
## Dokumentacja konfiguracji {#configuration-reference}
|
|
|
|
| Zmienna | Domyślnie | Opis |
|
|
|---|---|---|
|
|
| `OIDC_ENABLED` | `false` | Włącz logowanie OIDC. Na stronie logowania pojawia się przycisk „Zaloguj się przez SSO”. |
|
|
| `OIDC_ISSUER_URL` | | URL wydawcy (issuer) dostawcy. Musi obsługiwać OIDC Discovery (`/.well-known/openid-configuration`). |
|
|
| `OIDC_CLIENT_ID` | | Identyfikator klienta OAuth zarejestrowany u Twojego dostawcy. |
|
|
| `OIDC_CLIENT_SECRET` | | Sekret klienta OAuth. |
|
|
| `OIDC_SCOPES` | `openid profile email` | Lista zakresów do zażądania, rozdzielona spacjami. |
|
|
| `OIDC_AUTO_CREATE_USERS` | `true` | Automatycznie utwórz lokalne konto użytkownika przy pierwszym logowaniu OIDC. |
|
|
| `OIDC_DEFAULT_ROLE` | `user` | Rola przypisana automatycznie tworzonym użytkownikom OIDC. Jedna z: `admin`, `editor` lub `user`. |
|
|
| `OIDC_AUTO_LINK_USERS` | `false` | Powiąż tożsamość OIDC z istniejącym lokalnym użytkownikiem, jeśli adres e-mail się zgadza. |
|
|
| `OIDC_PROVIDER_NAME` | | Wyświetlana nazwa na przycisku logowania (np. „Keycloak”, „Google”). Jeśli puste, przycisk pokazuje „SSO”. |
|
|
| `OIDC_CLOCK_TOLERANCE` | `30` | Tolerancja odchylenia zegara w sekundach przy walidacji tokenu. |
|
|
| `OIDC_USERNAME_CLAIM` | `preferred_username` | Oświadczenie (claim) tokenu ID używane jako nazwa użytkownika dla nowych kont. |
|
|
| `EXTERNAL_URL` | | Publiczny URL, pod którym SnapOtter jest osiągalny. Wymagany, aby OIDC zbudowało poprawne URI przekierowania. |
|
|
| `COOKIE_SECRET` | generowany automatycznie | Sekret do podpisywania ciasteczek sesji. Ustaw go jawnie, gdy uruchamiasz wiele replik. |
|
|
|
|
## Przewodniki dla dostawców {#provider-guides}
|
|
|
|
### Keycloak {#keycloak}
|
|
|
|
1. Utwórz nowy realm (lub użyj istniejącego).
|
|
2. Przejdź do **Clients** i utwórz nowego klienta:
|
|
- **Client ID**: `snapotter`
|
|
- **Client authentication**: On (poufny)
|
|
- **Authentication flow**: Standard flow (Authorization Code)
|
|
3. W zakładce **Settings** klienta ustaw **Valid redirect URIs** na swój adres URL wywołania zwrotnego (np. `https://photos.example.com/api/auth/oidc/callback`).
|
|
4. Skopiuj **Client secret** z zakładki **Credentials**.
|
|
5. Ustaw `OIDC_ISSUER_URL` na `https://keycloak.example.com/realms/your-realm`.
|
|
|
|
### Authentik {#authentik}
|
|
|
|
1. W interfejsie administracyjnym przejdź do **Applications > Providers** i utwórz nowego **OAuth2/OpenID Provider**.
|
|
- **Client type**: Confidential
|
|
- **Redirect URIs**: Twój adres URL wywołania zwrotnego
|
|
- **Signing key**: Wybierz istniejący klucz lub utwórz nowy
|
|
2. Utwórz **Application** i powiąż ją z dostawcą.
|
|
3. Skopiuj **Client ID** oraz **Client Secret** z ustawień dostawcy.
|
|
4. Ustaw `OIDC_ISSUER_URL` na `https://authentik.example.com/application/o/snapotter/` (końcowy ukośnik ma znaczenie).
|
|
|
|
### Google {#google}
|
|
|
|
1. Przejdź do [Google Cloud Console](https://console.cloud.google.com/).
|
|
2. Utwórz projekt (lub wybierz istniejący).
|
|
3. Przejdź do **APIs & Services > OAuth consent screen** i skonfiguruj go.
|
|
4. Przejdź do **APIs & Services > Credentials** i utwórz **OAuth 2.0 Client ID**:
|
|
- **Application type**: Web application
|
|
- **Authorized redirect URIs**: Twój adres URL wywołania zwrotnego
|
|
5. Skopiuj **Client ID** oraz **Client secret**.
|
|
6. Ustaw `OIDC_ISSUER_URL` na `https://accounts.google.com`.
|
|
7. Ustaw `OIDC_USERNAME_CLAIM` na `email` (Google nie udostępnia `preferred_username`).
|
|
|
|
## Provisioning użytkowników {#user-provisioning}
|
|
|
|
### Automatyczne tworzenie {#auto-create}
|
|
|
|
Gdy `OIDC_AUTO_CREATE_USERS` ma wartość `true` (domyślnie), lokalne konto użytkownika jest tworzone przy pierwszym logowaniu przez OIDC. Nazwa użytkownika pochodzi z oświadczenia (claim) określonego przez `OIDC_USERNAME_CLAIM`, a rola jest ustawiana na `OIDC_DEFAULT_ROLE`.
|
|
|
|
Jeśli wystąpi konflikt nazw użytkowników, dodawany jest sufiks numeryczny (np. `jane` staje się `jane_2`).
|
|
|
|
### Automatyczne łączenie {#auto-link}
|
|
|
|
Gdy `OIDC_AUTO_LINK_USERS` ma wartość `true`, SnapOtter łączy tożsamość OIDC z istniejącym lokalnym kontem, jeśli adresy e-mail się zgadzają. Jest to przydatne, gdy masz wcześniej utworzone konta użytkowników i chcesz, aby zaczęli korzystać z SSO bez utraty swoich danych.
|
|
|
|
::: warning
|
|
Włączaj automatyczne łączenie tylko wtedy, gdy ufasz, że Twój dostawca OIDC weryfikuje adresy e-mail. Niezweryfikowany e-mail mógłby pozwolić komuś na przejęcie konta innego użytkownika.
|
|
:::
|
|
|
|
### Wyłączanie logowania lokalnego {#disabling-local-login}
|
|
|
|
OIDC nie wyłącza lokalnego logowania nazwą użytkownika i hasłem. Obie metody pozostają dostępne. Administratorzy nadal mogą logować się przy użyciu danych lokalnych, jeśli dostawca OIDC jest nieosiągalny.
|
|
|
|
## Certyfikaty samopodpisane {#self-signed-certificates}
|
|
|
|
Jeśli Twój dostawca OIDC używa certyfikatu samopodpisanego lub z prywatnego CA, zamontuj pakiet CA w kontenerze i wskaż na niego `NODE_EXTRA_CA_CERTS`:
|
|
|
|
```yaml
|
|
services:
|
|
SnapOtter:
|
|
image: snapotter/snapotter:latest
|
|
volumes:
|
|
- ./my-ca.pem:/etc/ssl/certs/custom-ca.pem:ro
|
|
environment:
|
|
NODE_EXTRA_CA_CERTS: /etc/ssl/certs/custom-ca.pem
|
|
OIDC_ENABLED: "true"
|
|
OIDC_ISSUER_URL: "https://auth.internal.example.com/realms/myrealm"
|
|
OIDC_CLIENT_ID: "snapotter"
|
|
OIDC_CLIENT_SECRET: "your-secret-here"
|
|
```
|
|
|
|
::: danger
|
|
Nie ustawiaj `NODE_TLS_REJECT_UNAUTHORIZED=0`. Wyłącza to całą weryfikację TLS i stanowi zagrożenie bezpieczeństwa.
|
|
:::
|
|
|
|
## Rozwiązywanie problemów {#troubleshooting}
|
|
|
|
### Niezgodność URI przekierowania {#redirect-uri-mismatch}
|
|
|
|
Najczęstszy błąd. Sprawdź te różnice między tym, czego oczekuje Twój dostawca, a tym, co wysyła SnapOtter:
|
|
|
|
- `http` kontra `https` - schemat musi się dokładnie zgadzać
|
|
- Końcowy ukośnik - niektórzy dostawcy są pod tym względem rygorystyczni
|
|
- Numer portu - dołącz port, jeśli jest niestandardowy
|
|
- Ścieżka - musi być `/api/auth/oidc/callback`
|
|
|
|
Sprawdź dokładnie `EXTERNAL_URL`. Musi zgadzać się z URL-em, który użytkownicy wpisują w przeglądarce.
|
|
|
|
### UNABLE_TO_VERIFY_LEAF_SIGNATURE {#unable-to-verify-leaf-signature}
|
|
|
|
Dostawca OIDC używa certyfikatu, któremu Node.js nie ufa. Zobacz [Certyfikaty samopodpisane](#self-signed-certificates) powyżej.
|
|
|
|
### Błędy odchylenia zegara {#clock-skew-errors}
|
|
|
|
Jeśli zegar Twojego serwera i zegar dostawcy OIDC nie są zsynchronizowane, walidacja tokenu może się nie powieść. Zwiększ `OIDC_CLOCK_TOLERANCE` (domyślnie 30 sekund). Lepszym rozwiązaniem jest uruchomienie NTP na obu maszynach.
|
|
|
|
### „Dostawca OIDC nieosiągalny” {#oidc-provider-unreachable}
|
|
|
|
SnapOtter pobiera dokument discovery dostawcy przy starcie oraz podczas logowania. Sprawdź:
|
|
|
|
- Rozwiązywanie DNS z wnętrza kontenera Docker (`docker exec snapotter nslookup auth.example.com`)
|
|
- Reguły zapory między kontenerem a dostawcą
|
|
- Wartość `OIDC_ISSUER_URL` - musi być osiągalna z serwera, a nie tylko z Twojej przeglądarki
|
|
|
|
### Brakujące oświadczenia (claims) {#missing-claims}
|
|
|
|
Jeśli po zalogowaniu nazwy użytkowników lub adresy e-mail są puste, Twój dostawca może nie zwracać oczekiwanych oświadczeń. Zweryfikuj:
|
|
|
|
- Zakresy skonfigurowane w `OIDC_SCOPES` obejmują `profile` oraz `email`
|
|
- Dostawca jest skonfigurowany tak, aby dołączać oświadczenie określone w `OIDC_USERNAME_CLAIM` do tokenu ID
|
|
- Niektórzy dostawcy wymagają jawnej konfiguracji mappera/zakresu, aby udostępnić oświadczenia
|