OpenID Connect (OIDC) identity and OAuth 2.0 provider with pluggable connectors
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Derek Parker 20857d71e7 email/smtp: Fix type comparison error 11 years ago
Documentation Documentation: Add how to setup email configuration 11 years ago
Godeps godeps: Add gomail 11 years ago
admin *: move original project to dex 11 years ago
client *: move original project to dex 11 years ago
cmd fixup 11 years ago
connector *: move original project to dex 11 years ago
contrib contrib/k8s: docs for using k8s configs 11 years ago
db *: Remove unnecessary else statements 11 years ago
email email/smtp: Fix type comparison error 11 years ago
examples Merge pull request #92 from yifan-gu/ssl 11 years ago
functional refresh: bcrypt raw bytes rather than base64 encoded string. 11 years ago
integration server: check scope in requests. 11 years ago
pkg *: Remove unnecessary else statements 11 years ago
refresh *: Remove unnecessary else statements 11 years ago
repo *: move original project to dex 11 years ago
schema *: move original project to dex 11 years ago
server server: user management endpoints strictly conform to schema 11 years ago
session *: Remove unnecessary else statements 11 years ago
static email: Remove unused ID field 11 years ago
user *: Remove unnecessary else statements 11 years ago
.gitignore *: move original project to dex 11 years ago
CONTRIBUTING.md *: move original project to dex 11 years ago
DCO *: move original project to dex 11 years ago
Dockerfile *: move original project to dex 11 years ago
LICENSE *: move original project to dex 11 years ago
MAINTAINERS *: move original project to dex 11 years ago
NOTICE *: move original project to dex 11 years ago
README.md Merge pull request #96 from bobbyrullo/who_should_ 11 years ago
build db: add DB migration code and scripts. 11 years ago
build-docker-push build-docker-push: allow override of quay repo 11 years ago
build-units *: move original project to dex 11 years ago
cover *: move original project to dex 11 years ago
go-docker go-docker: support functional tests 11 years ago
test *: move original project to dex 11 years ago
test-functional go-docker: support functional tests 11 years ago

README.md

dex

Docker Repository on Quay.io

dex is a federated identity management service. It provides OpenID Connect (OIDC) to users, and can proxy to multiple remote identity providers (IdP) to drive actual authentication, as well as managing local username/password credentials.

We named the project 'dex' because it is a central index of users that other pieces of software can authenticate against.

Architecture

dex consists of multiple components:

  • dex-worker is the primary server component of dex
    • host a user-facing API that drives the OIDC protocol
    • proxy to remote identity providers via "connectors"
    • provides an API for administrators to manage users.
  • dex-overlord is an auxiliary process responsible for various administrative tasks:
    • rotation of keys used by the workers to sign identity tokens
    • garbage collection of stale data in the database
    • provides an API for bootstrapping the system.
  • dexctl is a CLI tool used to manage a dex deployment
    • configure identity provider connectors
    • administer OIDC client identities
  • database; a database is used to for persistent storage for keys, users, OAuth sessions and other data. Currently Postgres is the only supported database.

A typical dex deployment consists of N dex-workers behind a load balanacer, and one dex-overlord. The dex-workers directly handle user requests, so the loss of all workers can result in service downtime. The single dex-overlord runs its tasks periodically, so it does not need to maintain 100% uptime.

Who Should Use Dex?

A non-exhaustive list of those who would benfit from using dex:

  • Those who want a language/framework-agnostic way to manage authentication.
  • Those who want to federate authentication from mutiple providers of differing types.
  • Those who want to manage user credentials (eg. username and password) and perform authentication locally
  • Those who want to create an OIDC Identity Provider for multiple clients to authenticate against.
  • Those who want any or all of the above in a Free and Open Source project.

Connectors

Remote IdPs could implement any auth-N protocol. Connectors contain protocol-specific logic and are used to communicate with remote IdPs. Possible examples of connectors could be: OIDC, LDAP, Local credentials, Basic Auth, etc.

dex ships with an OIDC connector, useful for authenticating with services like Google and Salesforce (or even other dex instances!) and a "local" connector, in which dex itself presents a UI for users to authenticate via dex-stored credentials.

Future connectors can be developed and added as future interoperability requirements emerge.

Relevant Specifications

These specs are referenced and implemented to some degree in the jose package of this project.

OpenID Connect (OIDC) is broken up into several specifications. The following (amongst others) are relevant:

Example OIDC Discovery Endpoints

Next steps:

If you want to try out dex quickly with a single process and no database (do not run this way in production!) take a look at the dev guide.

For running the full stack check out the getting started guide.

Coming Soon

  • Multiple backing Identity Providers
  • Identity Management
  • Authorization

Similar Software

CloudFoundry UAA

The UAA is a multi tenant identity management service, used in Cloud Foundry, but also available as a stand alone OAuth2 server.

OmniAuth

OmniAuth provides authentication federation at the language (Ruby) level, with a wide range of integrations available.

Okta

Okta is a commercial product which is similar to dex in that for it too, identity federation is a key feature. It connects to many more authentication providers than dex, and also does the federation in the oppposite direction - it can be used as a SSO to other identity providers.

Shibboleth

Shibboleth is an open source system implementing the SAML standard, and can federate from a variety of backends, most notably LDAP.