
Provedor de identidade OpenID Connect (OIDC) e OAuth 2.0 com conectores plugáveis

O Dex é um serviço de identidade que usa OpenID Connect para conduzir a autenticação de outros aplicativos.
O Dex atua como um portal para outros provedores de identidade por meio de "conectores." Isso permite que o dex delegue a autenticação a servidores LDAP, provedores SAML ou provedores de identidade estabelecidos, como GitHub, Google e Active Directory. Os clientes escrevem sua lógica de autenticação uma única vez para falar com o dex, e o dex lida com os protocolos de um determinado backend.
ID Tokens são uma extensão OAuth2 introduzida pelo OpenID Connect e o principal recurso do dex. ID Tokens são JSON Web Tokens (JWTs) assinados pelo dex e retornados como parte da resposta OAuth2 que atesta a identidade do usuário final. Um exemplo de JWT pode ser assim:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
ID Tokens contêm claims padrão que atestam qual aplicativo cliente autenticou o usuário, quando o token expira e a identidade do usuário.
{
"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"
}
Como esses tokens são assinados pelo dex e contêm claims baseados em padrões, outros serviços podem consumi-los como credenciais de serviço a serviço. Sistemas que já podem consumir ID Tokens OpenID Connect emitidos pelo dex incluem:
Para obter detalhes sobre como solicitar ou validar um ID Token, consulte "Escrevendo aplicativos que usam dex".
O Dex executa nativamente sobre qualquer cluster Kubernetes usando Custom Resource Definitions e pode conduzir a autenticação do servidor de API por meio do plugin OpenID Connect. Clientes, como kubelogin e kubectl, podem agir em nome de usuários que podem fazer login no cluster por meio de qualquer provedor de identidade suportado pelo dex.
Quando um usuário faz login por meio do dex, a identidade do usuário geralmente é armazenada em outro sistema de gerenciamento de usuários: um diretório LDAP, uma organização do GitHub, etc. O dex atua como um intermediário entre um aplicativo cliente e o provedor de identidade upstream. O cliente só precisa entender o OpenID Connect para consultar o dex, enquanto o dex implementa uma variedade de protocolos para consultar outros sistemas de gerenciamento de usuários.

Um "conector" é uma estratégia usada pelo dex para autenticar um usuário em outro provedor de identidade. O Dex implementa conectores que visam plataformas específicas, como GitHub, LinkedIn e Microsoft, bem como protocolos estabelecidos como LDAP e SAML.
Dependendo das limitações dos conectores, os protocolos podem impedir que o dex emita refresh tokens ou retorne claims de associação a grupos. Por exemplo, como o SAML não fornece uma maneira não interativa de atualizar asserções, se um usuário fizer login por meio do conector SAML, o dex não emitirá um refresh token para seu cliente. O suporte a refresh tokens é necessário para clientes que exigem acesso offline, como kubectl.
O Dex implementa os seguintes conectores:
Estável, beta e alpha são definidos como:
Todas as alterações ou descontinuações de recursos dos conectores serão anunciadas nas notas de versão.
Consulte a documentação oficial para primeiros passos, configuração e guias de uso.
Consulte nossa política de segurança para obter detalhes sobre como reportar vulnerabilidades.
Consulte CONTRIBUTING.md para configuração de desenvolvimento, diretrizes e como enviar pull requests.
O projeto é licenciado sob a Apache License, Versão 2.0.
| Nome | suporta refresh tokens | suporta a claim de grupos | suporta a claim preferred_username | status | notas |
|---|
| LDAP | sim | sim | sim | estável | |
| GitHub | sim | sim | sim | estável | |
| SAML 2.0 | não | sim | não | estável | AVISO: Não mantido e provavelmente vulnerável a bypasses de autenticação (#1884) |
| GitLab | sim | sim | sim | beta | |
| OpenID Connect | sim | sim | sim | beta | Inclui Salesforce, Azure, etc. |
| OAuth 2.0 | não | sim | sim | alpha | |
| sim | sim | sim | alpha | ||
| sim | não | não | beta | ||
| Microsoft | sim | sim | não | beta | |
| AuthProxy | não | sim | não | alpha | Proxies de autenticação como Apache2 mod_auth, etc. |
| Bitbucket Cloud | sim | sim | não | alpha | |
| OpenShift | sim | sim | não | alpha | |
| Atlassian Crowd | sim | sim | sim * | beta | a claim preferred_username deve ser configurada por meio da configuração |
| Gitea | sim | não | sim | beta | |
| OpenStack Keystone | sim | sim | não | alpha |