Configurați SSO cu Keycloak¶
Keycloak este un furnizor de identitate self-hosted, complet compatibil OIDC. Pentru că îl rulați dvs., URL-ul de discovery este construit din propriul nume de host și realm, nu dintr-un domeniu al unui furnizor.
Acest ghid acoperă partea Keycloak: crearea clientului și colectarea valorilor de care are nevoie digna. Partea digna — dashboard_config.toml, testarea și depanarea — este aceeași pentru orice furnizor și este descrisă în Prezentare generală Single Sign-On.
Înainte de a începe¶
| Cerință | Notițe |
|---|---|
| Versiune Keycloak | 17 sau mai recent pentru căile URL folosite aici — vedeți nota din Pasul 4 |
| Rol Keycloak | realm-admin în realm-ul țintă, sau administrator de server |
| Realm | Realm-ul din care fac parte utilizatorii digna, nu neapărat master |
| URI de redirect digna | URL-ul la care utilizatorii revin după autentificare, ex. https://digna.yourdomain.com/oidc/callback |
Pasul 1: Selectați realm-ul¶
- Deschideți consola de administrare Keycloak
- Folosiți selectorul de realm din stânga sus pentru a comuta la realm-ul în care se află utilizatorii dvs.
Nu folosiți realm-ul master
Realm-ul master este destinat administrării Keycloak în sine. Clienții aplicațiilor trebuie să aparțină unui realm dedicat; punerea digna în master oferă utilizatorilor ei acces în consola de administrare Keycloak.
Pasul 2: Creați clientul¶
- Mergeți la Clients și faceți clic pe Create client
- Configurați:
- Client type: OpenID Connect
- Client ID:
digna— acesta devineDIGNA_OIDC_CLIENT_ID - Faceți clic pe Next
- La pasul Capability config, porniți Client authentication
- Lăsați Standard flow activat; celelalte flow-uri nu sunt necesare
- Faceți clic pe Next
Client authentication trebuie activată
Cu Client authentication dezactivat, Keycloak creează un client public, care nu are deloc credențiale — fila Credentials din Pasul 4 nu va exista. digna are nevoie de un client confidențial. Această setare poate fi schimbată după creare dacă ați greșit.
Pasul 3: Configurați URI-ul de redirect¶
La pasul Login settings (sau la fila Settings ulterior):
- Valid redirect URIs: introduceți URL-ul callback al digna:
- Web origins: lăsați gol, sau setați la
+pentru a oglindi redirect URIs - Faceți clic pe Save
Evitați wildcard-urile
Keycloak acceptă pattern-uri precum https://digna.yourdomain.com/*. Un wildcard permite oricărui path de pe acel host să primească un cod de autorizare, deci preferați URL-ul exact al callback-ului.
Pasul 4: Obțineți secretul clientului¶
- Deschideți fila Credentials
- Confirmați că Client Authenticator este Client Id and Secret
- Copiați Client secret → devine
DIGNA_OIDC_CLIENT_SECRET
Secretul rămâne recuperabil aici și poate fi regénérat cu Regenerate.
Pasul 5: Construiți URL-ul de discovery¶
Înlocuiți host-ul Keycloak și numele realm-ului:
De exemplu:
Keycloak 16 și versiunile anterioare includ /auth
Înainte de Keycloak 17, fiecare endpoint se afla sub prefixul /auth:
Distribuțiile care setează KC_HTTP_RELATIVE_PATH=/auth păstrează și pe versiunile curente layout-ul vechi. Dacă URL-ul fără /auth returnează 404, încercați-l cu.
Deschideți URL-ul într-un browser înainte de a continua. Un document JSON confirmă că host-ul și realm-ul sunt corecte.
Pasul 6: Configurați digna¶
dashboard/dashboard_config.toml¶
config.toml¶
[oidc.keycloak]
DIGNA_OIDC_CLIENT_ID = "digna"
DIGNA_OIDC_CLIENT_SECRET = "<secretul clientului copiat la Pasul 4>"
DIGNA_OIDC_REDIRECT_URI = "https://digna.yourdomain.com/oidc/callback"
DIGNA_OIDC_CONFIGURATION_URL = "https://sso.yourdomain.com/realms/company/.well-known/openid-configuration"
Cheia key din ambele fișiere trebuie să se potrivească — aici keycloak. Observați că nu trebuie neapărat să fie egală cu Client ID din Keycloak, deși păstrarea lor identice face documentarea mai ușoară.
Pasul 7: Testați¶
Repornți backend-ul și serverul web, apoi deschideți dashboard-ul. Consultați Testarea autentificării pentru lista completă de verificări.
Depanare Keycloak¶
Invalid parameter: redirect_uri¶
URL-ul callback nu este acoperit de Valid redirect URIs. Keycloak înregistrează URI-ul primit în log-ul serverului, ceea ce este cel mai rapid mod de a vedea nepotrivirea exactă.
Fila Credentials lipsește¶
Clientul este public. Porniți Client authentication din Settings → Capability config.
404 la URL-ul de discovery¶
Fie numele realm-ului este greșit, fie deployment-ul folosește prefixul /auth. Verificați lista de realm-uri în consola de administrare și încercați ambele forme de URL.
unauthorized_client sau invalid_client¶
Standard flow este dezactivat în Capability config, sau secretul a fost regénérat în Keycloak fără a actualiza config.toml.
Erori de certificare din partea backend-ului¶
Un Keycloak self-hosted, aflat în spatele unui certificat privat sau semnat self-signed, va cauza eșecul apelului HTTPS outbound al digna către URL-ul de discovery. Instalați CA-ul emitent în trust store-ul mașinii care rulează backend-ul digna.
Vezi și¶
- Prezentare generală Single Sign-On — referință de configurare, testare și depanare generală
- Keycloak: Securing applications