Pređi na glavni sadržaj

OpenID Connect

Semaphore podržava autentifikaciju putem OpenID Connect (OIDC).

Linkovi:

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:

ParametarOpis
display_nameNaziv provajdera koji se prikazuje na ekranu za prijavu.
iconMDI ikona koja se prikazuje ispred naziva provajdera na ekranu za prijavu.
colorBoja provajdera koja se prikazuje na ekranu za prijavu.
client_idClient ID provajdera.
client_id_filePutanja do datoteke u kojoj je sačuvan client ID provajdera. Ima niži prioritet od client_id.
client_secretClient Secret provajdera.
client_secret_filePutanja do datoteke u kojoj je sačuvan client secret provajdera. Ima niži prioritet od client_secret.
redirect_url
provider_url
scopes
username_claimClaim izraz za korisničko ime*.
email_claimClaim izraz za e-adresu*.
name_claimClaim izraz za ime profila*.
orderPozicija dugmeta provajdera na ekranu za prijavu.
allow_idp_initiatedUključuje prijavu koju pokreće IdP za ovog provajdera. Podrazumevano false.
return_via_stateProsleđ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 iss i target_link_uri.
  • Keycloak / Authentik / Ping / OneLogin — postavite launch / home URL aplikacije na Initiate Login URI.
  • Azure AD / EntraMy Apps koristi početni URL koji pokreće SP i ne šalje uvek iss; usmerite početni URL na https://your-domain.com/api/auth/oidc/<provider-id>/login umesto toga.

Bezbednost

  • Prijava koju pokreće IdP je podrazumevano isključena i mora se uključiti za svakog provajdera posebno.
  • Parametar iss se proverava u odnosu na konfigurisanog izdavaoca kako bi se sprečila zamena provajdera.
  • target_link_uri se prihvata samo kada pokazuje nazad na Semaphore (nema otvorenih preusmeravanja).
  • Tok prolazi kroz potpunu Authorization Code razmenu sa CSRF state i nonce, 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:

Snimak ekrana stranice za prijavu u Semaphore, sa dva dugmeta za prijavu. Na jednom piše "Sign In", na drugom "Sign in with MySSO"