
Provider di identità OpenID Connect (OIDC) e OAuth 2.0 con connettori pluggabili

Dex è un servizio di identità che usa OpenID Connect per guidare l'autenticazione per altre app.
Dex agisce come un portale verso altri provider di identità tramite "connectors." Questo consente a dex di delegare l'autenticazione a server LDAP, provider SAML o provider di identità affermati come GitHub, Google e Active Directory. I client scrivono la loro logica di autenticazione una sola volta per parlare con dex, poi dex gestisce i protocolli per un dato backend.
Gli ID Token sono un'estensione OAuth2 introdotta da OpenID Connect e la funzionalità principale di dex. Gli ID Token sono JSON Web Token (JWT) firmati da dex e restituiti come parte della risposta OAuth2 che attesta l'identità dell'utente finale. Un esempio di JWT potrebbe essere:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
Gli ID Token contengono claim standard che attestano quale app client ha effettuato l'accesso dell'utente, quando il token scade e l'identità dell'utente.
{
"iss": "http://127.0.0.1:5556/dex",
"sub": "CgcyMzQyNzQ5EgZnaXRodWI",
"aud": "example-app",
"exp": 1492882042,
"iat": 1492795642,
"at_hash": "bi96gOXZShvlWYtal9Eqiw",
"email": "[email protected]",
"email_verified": true,
"groups": [
"admins",
"developers"
],
"name": "Jane Doe"
}
Poiché questi token sono firmati da dex e contengono claim basati su standard, altri servizi possono consumarli come credenziali da servizio a servizio. I sistemi che possono già consumare gli ID Token OpenID Connect emessi da dex includono:
Per i dettagli su come richiedere o validare un ID Token, consulta "Writing apps that use dex".
Dex gira nativamente su qualsiasi cluster Kubernetes utilizzando le Custom Resource Definition e può guidare l'autenticazione del server API tramite il plugin OpenID Connect. Client come kubelogin e kubectl possono agire per conto di utenti che possono accedere al cluster tramite qualsiasi provider di identità supportato da dex.
Quando un utente accede tramite dex, l'identità dell'utente è solitamente memorizzata in un altro sistema di gestione utenti: una directory LDAP, un'organizzazione GitHub, ecc. Dex agisce come un ponte tra un'app client e il provider di identità a monte. Il client deve solo comprendere OpenID Connect per interrogare dex, mentre dex implementa una serie di protocolli per interrogare altri sistemi di gestione utenti.

Un "connector" è una strategia usata da dex per autenticare un utente tramite un altro provider di identità. Dex implementa connector che mirano a piattaforme specifiche come GitHub, LinkedIn e Microsoft, oltre a protocolli consolidati come LDAP e SAML.
A seconda dei connector, le limitazioni dei protocolli possono impedire a dex di emettere refresh token o di restituire claim di appartenenza ai gruppi. Ad esempio, poiché SAML non fornisce un modo non interattivo per aggiornare le asserzioni, se un utente accede tramite il connector SAML, dex non emetterà un refresh token per il suo client. Il supporto ai refresh token è necessario per i client che richiedono accesso offline, come kubectl.
Dex implementa i seguenti connector:
Stabile, beta e alpha sono definiti come:
Tutte le modifiche o le deprecazioni delle funzionalità dei connector saranno annunciate nelle note di rilascio.
Consulta la documentazione ufficiale per guide su iniziare, configurazione e utilizzo.
Consulta la nostra security policy per i dettagli su come segnalare vulnerabilità.
Consulta CONTRIBUTING.md per la configurazione dell'ambiente di sviluppo, le linee guida e come inviare pull request.
Il progetto è concesso in licenza sotto la Apache License, Version 2.0.
| Nome | supporta refresh token | supporta il claim groups | supporta il claim preferred_username | stato | note |
|---|
| LDAP | sì | sì | sì | stabile | |
| GitHub | sì | sì | sì | stabile | |
| SAML 2.0 | no | sì | no | stabile | AVVERTENZA: non mantenuto e probabilmente vulnerabile a bypass di autenticazione (#1884) |
| GitLab | sì | sì | sì | beta | |
| OpenID Connect | sì | sì | sì | beta | Include Salesforce, Azure, ecc. |
| OAuth 2.0 | no | sì | sì | alpha | |
| sì | sì | sì | alpha | ||
| sì | no | no | beta | ||
| Microsoft | sì | sì | no | beta | |
| AuthProxy | no | sì | no | alpha | Proxy di autenticazione come Apache2 mod_auth, ecc. |
| Bitbucket Cloud | sì | sì | no | alpha | |
| OpenShift | sì | sì | no | alpha | |
| Atlassian Crowd | sì | sì | sì * | beta | il claim preferred_username deve essere configurato tramite config |
| Gitea | sì | no | sì | beta | |
| OpenStack Keystone | sì | sì | no | alpha |