
OpenID Connect (OIDC) Identitäts- und OAuth-2.0-Anbieter mit steckbaren Konnektoren

Dex ist ein Identitätsdienst, der OpenID Connect nutzt, um die Authentifizierung für andere Apps zu ermöglichen.
Dex fungiert über „Connectors“ als Portal zu anderen Identitätsanbietern. Dadurch kann Dex die Authentifizierung an LDAP-Server, SAML-Anbieter oder etablierte Identitätsanbieter wie GitHub, Google und Active Directory delegieren. Clients schreiben ihre Authentifizierungslogik einmalig, um mit Dex zu kommunizieren, und Dex übernimmt dann die Protokolle für das jeweilige Backend.
ID-Tokens sind eine von OpenID Connect eingeführte OAuth2-Erweiterung und das Hauptmerkmal von Dex. ID-Tokens sind JSON-Web-Tokens (JWTs), die von Dex signiert und als Teil der OAuth2-Antwort zurückgegeben werden und die Identität des Endbenutzers bestätigen. Ein Beispiel-JWT könnte wie folgt aussehen:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
ID-Tokens enthalten Standard-Claims, die angeben, welche Client-App den Benutzer angemeldet hat, wann das Token abläuft und wie die Identität des Benutzers ist.
{
"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"
}
Da diese Token von Dex signiert sind und standardbasierte Claims enthalten, können andere Dienste sie als Service-to-Service-Anmeldedaten verwenden. Systeme, die bereits von Dex ausgestellte OpenID-Connect-ID-Tokens verarbeiten können, sind:
Details zum Anfordern oder Validieren eines ID-Tokens finden Sie unter „Apps schreiben, die Dex verwenden“.
Dex läuft nativ auf jedem Kubernetes-Cluster mithilfe von Custom Resource Definitions und kann die API-Server-Authentifizierung über das OpenID-Connect-Plugin steuern. Clients wie kubelogin und kubectl können im Namen von Benutzern handeln, die sich über einen beliebigen von Dex unterstützten Identitätsanbieter beim Cluster anmelden.
Wenn sich ein Benutzer über Dex anmeldet, wird seine Identität normalerweise in einem anderen Benutzerverwaltungssystem gespeichert: einem LDAP-Verzeichnis, einer GitHub-Organisation usw. Dex fungiert als Vermittler zwischen einer Client-App und dem vorgelagerten Identitätsanbieter. Der Client muss nur OpenID Connect verstehen, um Dex abzufragen, während Dex eine Reihe von Protokollen zum Abfragen anderer Benutzerverwaltungssysteme implementiert.

Ein „Connector“ ist eine Strategie, die Dex zur Authentifizierung eines Benutzers gegenüber einem anderen Identitätsanbieter verwendet. Dex implementiert Connectors für bestimmte Plattformen wie GitHub, LinkedIn und Microsoft sowie für etablierte Protokolle wie LDAP und SAML.
Abhängig von den Connectors können Protokollbeschränkungen Dex daran hindern, Refresh-Tokens auszustellen oder Gruppenzugehörigkeits-Claims zurückzugeben. Da SAML beispielsweise keine nicht-interaktive Möglichkeit zur Aktualisierung von Assertions bietet, stellt Dex keinen Refresh-Token für seinen Client aus, wenn sich ein Benutzer über den SAML-Connector anmeldet. Die Unterstützung von Refresh-Tokens ist für Clients erforderlich, die Offline-Zugriff benötigen, wie z. B. kubectl.
Dex implementiert die folgenden Connectors:
Stabil, Beta und Alpha sind wie folgt definiert:
Alle Änderungen oder Veraltungen von Connector-Funktionen werden in den Versionshinweisen angekündigt.
Siehe die offizielle Dokumentation für Einstiegs-, Konfigurations- und Nutzungsanleitungen.
Einzelheiten zur Meldung von Schwachstellen finden Sie in unserer Sicherheitsrichtlinie.
Siehe CONTRIBUTING.md für das Entwicklungssetup, Richtlinien und die Einreichung von Pull Requests.
Das Projekt ist unter der Apache License, Version 2.0 lizenziert.
| Name | unterstützt Refresh-Tokens | unterstützt Gruppen-Claim | unterstützt preferred_username-Claim | Status | Anmerkungen |
|---|
| LDAP | ja | ja | ja | stabil | |
| GitHub | ja | ja | ja | stabil | |
| SAML 2.0 | nein | ja | nein | stabil | WARNUNG: Nicht mehr gewartet und wahrscheinlich anfällig für Auth-Bypasses (#1884) |
| GitLab | ja | ja | ja | Beta | |
| OpenID Connect | ja | ja | ja | Beta | Umfasst Salesforce, Azure usw. |
| OAuth 2.0 | nein | ja | ja | Alpha | |
| ja | ja | ja | Alpha | ||
| ja | nein | nein | Beta | ||
| Microsoft | ja | ja | nein | Beta | |
| AuthProxy | nein | ja | nein | Alpha | Authentifizierungs-Proxys wie Apache2 mod_auth usw. |
| Bitbucket Cloud | ja | ja | nein | Alpha | |
| OpenShift | ja | ja | nein | Alpha | |
| Atlassian Crowd | ja | ja | ja * | Beta | preferred_username-Claim muss über die Konfiguration eingerichtet werden |
| Gitea | ja | nein | ja | Beta | |
| OpenStack Keystone | ja | ja | nein | Alpha |