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*.
groups_claimNaziv claim-a u tokenu koji sadrži grupe korisnika. Koriste ga mapiranja grupa.
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.

Uloge u projektu na osnovu grupa Enterprise​

informacija

Mapiranja grupa dostupna su u izdanju Semaphore Enterprise.

Mapiranje grupe daje ulogu u projektu svakom korisniku iz jedne grupe u provajderu identiteta. Na primer, mapiranje može da da članovima grupe devops ulogu Manager u projektu Infrastructure.

Slanje grupa u tokenu​

Postavite groups_claim na naziv claim-a koji sadrži grupe korisnika. Bez ovog podešavanja prijave preko provajdera ne menjaju uloge iz mapiranja grupa.

Grupe moraju biti u ID tokenu. Mnogi provajderi identiteta, na primer Dex, šalju grupe samo kada Semaphore zatraži scope groups:

{
"oidc_providers": {
"dex": {
"display_name": "Sign in with Dex",
"provider_url": "https://dex.your-domain.com",
"client_id": "***",
"client_secret": "***",
"redirect_url": "https://your-domain.com/api/auth/oidc/dex/redirect",
"scopes": ["openid", "email", "profile", "groups"],
"groups_claim": "groups"
}
}
}

Kreiranje mapiranja grupe​

  1. Otvorite administratorski meni u donjem levom uglu i izaberite Group mappings.
  2. Izaberite New mapping.
  3. Izaberite provajdera, unesite naziv grupe, pa izaberite projekat i ulogu.
  4. Izaberite Save.

Naziv grupe mora tačno da se poklapa sa nazivom u tokenu, uključujući velika i mala slova. Da biste promenili mapiranje grupe, obrišite to mapiranje i kreirajte novo.

Semaphore ažurira uloge iz mapiranja grupa pri svakoj prijavi korisnika preko provajdera. Korisnik koji napusti grupu zadržava ulogu do sledeće prijave. Da bi takve promene stupale na snagu ranije, ograničite trajanje sesije opcijom auth.max_session_life_hours.

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 / Entra — My 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"