OpenID Connect
Semaphore podržava autentifikaciju putem OpenID Connect (OIDC).
Linkovi:
- GitHub konfiguracija
- Google konfiguracija
- GitLab konfiguracija
- Authelia konfiguracija
- Authentik konfiguracija
- Keycloak konfiguracija
- Okta konfiguracija
- PingFederate konfiguracija
- Azure konfiguracija
- Zitadel konfiguracija
- Pocket-ID konfiguracija
Primer konfiguracije SSO provajdera:
{
"oidc_providers": {
"mysso": {
"display_name": "Sign in with MySSO",
"color": "orange",
"icon": "login",
"provider_url": "https://mysso-provider.com",
"client_id": "***",
"client_secret": "***",
"redirect_url": "https://your-domain.com/api/auth/oidc/mysso/redirect"
}
}
}
Konfigurisanje putem promenljive okruženja
Kada se pokreće u kontejnerima, može biti zgodno da se provajderi konfigurišu pomoću jedne promenljive okruženja:
SEMAPHORE_OIDC_PROVIDERS='{
"github": {
"client_id": "***",
"client_secret": "***"
}
}'
Ova vrednost mora biti validan JSON string koji odgovara gore navedenoj strukturi oidc_providers.
Sve opcije SSO provajdera:
| Parametar | Opis |
|---|---|
display_name | Naziv provajdera koji se prikazuje na ekranu za prijavu. |
icon | MDI ikona koja se prikazuje ispred naziva provajdera na ekranu za prijavu. |
color | Boja provajdera koja se prikazuje na ekranu za prijavu. |
client_id | Client ID provajdera. |
client_id_file | Putanja do datoteke u kojoj je sačuvan client ID provajdera. Ima niži prioritet od client_id. |
client_secret | Client Secret provajdera. |
client_secret_file | Putanja do datoteke u kojoj je sačuvan client secret provajdera. Ima niži prioritet od client_secret. |
redirect_url | |
provider_url | |
scopes | |
username_claim | Claim izraz za korisničko ime*. |
email_claim | Claim izraz za e-adresu*. |
name_claim | Claim izraz za ime profila*. |
order | Pozicija dugmeta provajdera na ekranu za prijavu. |
allow_idp_initiated | Uključuje prijavu koju pokreće IdP za ovog provajdera. Podrazumevano false. |
return_via_state | Prosleđuje putanju za povratak nakon prijave kroz OAuth parametar state umesto kroz URL za preusmeravanje. Podrazumevano true. |
endpoint.issuer | |
endpoint.auth | |
endpoint.token | |
endpoint.userinfo | |
endpoint.jwks | |
endpoint.algorithms |
*Claim izraz
Primer claim izraza:
email | {{ .username }}@your-domain.com
Semaphore prvo pokušava da preuzme polje email. Ako je prazno, izvršava se izraz koji sledi.
Izraz "username_claim": "|" generiše nasumičan username za svakog korisnika koji se prijavi preko provajdera.
Prijava koju pokreće IdP
Podrazumevano Semaphore podržava samo prijavu koju pokreće SP (SP-initiated): korisnik otvori Semaphore, klikne na dugme provajdera i biva preusmeren na provajdera identiteta (IdP).
Uz prijavu koju pokreće IdP (IdP-initiated) put može da počne kod provajdera identiteta — na primer klikom na Semaphore pločicu u Okta kontrolnoj tabli, Azure My Apps ili u pokretaču aplikacija u Keycloak / Authentik.
Semaphore ovo implementira pomoću standardnog mehanizma Third-Party Initiated Login (OpenID Connect Core 1.0 §4). IdP preusmerava pregledač na namenski Initiate Login URI, a Semaphore zatim započinje uobičajeni Authorization Code tok. Sama autentifikacija je i dalje potpuna, bezbedna razmena koda — Semaphore nikada ne prihvata nezatraženi token.
Uključivanje
Postavite allow_idp_initiated na true za provajdera:
{
"oidc_providers": {
"mysso": {
"display_name": "Sign in with MySSO",
"provider_url": "https://mysso-provider.com",
"client_id": "***",
"client_secret": "***",
"redirect_url": "https://your-domain.com/api/auth/oidc/mysso/redirect",
"allow_idp_initiated": true
}
}
}
Konfigurisanje provajdera identiteta
U svom IdP-u postavite Initiate Login URI aplikacije na:
https://your-domain.com/api/auth/oidc/<provider-id>/initiate
gde je <provider-id> ključ pod oidc_providers (na primer mysso).
IdP mora da pošalje parametar iss (issuer) na ovu krajnju tačku; Semaphore odbija zahteve čiji iss ne odgovara
konfigurisanom provajderu. Opcioni parametar login_hint se prosleđuje IdP-u, a opcioni target_link_uri
određuje stranicu koja se otvara nakon prijave (mora da pokazuje nazad na Semaphore, u suprotnom se ignoriše).
Napomene za pojedine provajdere:
- Okta — postavite Login initiated by na Either Okta or App (ili App Only) i popunite Initiate login URI. Okta
šalje i
issitarget_link_uri. - Keycloak / Authentik / Ping / OneLogin — postavite launch / home URL aplikacije na Initiate Login URI.
- Azure AD / Entra — My Apps koristi početni URL koji pokreće SP i ne šalje uvek
iss; usmerite početni URL nahttps://your-domain.com/api/auth/oidc/<provider-id>/loginumesto toga.
Bezbednost
- Prijava koju pokreće IdP je podrazumevano isključena i mora se uključiti za svakog provajdera posebno.
- Parametar
issse proverava u odnosu na konfigurisanog izdavaoca kako bi se sprečila zamena provajdera. target_link_urise prihvata samo kada pokazuje nazad na Semaphore (nema otvorenih preusmeravanja).- Tok prolazi kroz potpunu Authorization Code razmenu sa CSRF
stateinonce, tako da presretnuti ili ponovo poslati token ne može da se iskoristi za prijavu.
Ekran za prijavu
Za svakog od konfigurisanih provajdera na stranicu za prijavu dodaje se dodatno dugme za prijavu:
