From 2417fc9154ac371fcba33d4d0007ff90cc6ae41b Mon Sep 17 00:00:00 2001 From: Eric Chiang Date: Tue, 8 Nov 2016 11:51:47 -0800 Subject: [PATCH 1/2] Documentation/logos: add logos --- Documentation/logos/dex-glyph-bw.png | Bin 0 -> 8174 bytes Documentation/logos/dex-glyph-bw.svg | 20 ++++++++ Documentation/logos/dex-glyph-color.png | Bin 0 -> 10415 bytes Documentation/logos/dex-glyph-color.svg | 20 ++++++++ Documentation/logos/dex-glyph-white.png | Bin 0 -> 10505 bytes Documentation/logos/dex-glyph-white.svg | 22 +++++++++ Documentation/logos/dex-horizontal-color.png | Bin 0 -> 24829 bytes Documentation/logos/dex-horizontal-color.svg | 47 +++++++++++++++++++ Documentation/logos/dex-horizontal-white.png | Bin 0 -> 24387 bytes Documentation/logos/dex-horizontal-white.svg | 47 +++++++++++++++++++ 10 files changed, 156 insertions(+) create mode 100644 Documentation/logos/dex-glyph-bw.png create mode 100644 Documentation/logos/dex-glyph-bw.svg create mode 100644 Documentation/logos/dex-glyph-color.png create mode 100644 Documentation/logos/dex-glyph-color.svg create mode 100644 Documentation/logos/dex-glyph-white.png create mode 100644 Documentation/logos/dex-glyph-white.svg create mode 100644 Documentation/logos/dex-horizontal-color.png create mode 100644 Documentation/logos/dex-horizontal-color.svg create mode 100644 Documentation/logos/dex-horizontal-white.png create mode 100644 Documentation/logos/dex-horizontal-white.svg diff --git a/Documentation/logos/dex-glyph-bw.png b/Documentation/logos/dex-glyph-bw.png new file mode 100644 index 0000000000000000000000000000000000000000..0934cbb715435353158fec86b9b774e91fbf2e5b GIT binary patch literal 8174 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 literal 0 HcmV?d00001 diff --git a/Documentation/logos/dex-glyph-bw.svg b/Documentation/logos/dex-glyph-bw.svg new file mode 100644 index 00000000..57e0695f --- /dev/null +++ b/Documentation/logos/dex-glyph-bw.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + diff --git a/Documentation/logos/dex-glyph-color.png b/Documentation/logos/dex-glyph-color.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd5f21bfdcd445325d013080c1c5bf339de11ae GIT binary patch literal 10415 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 + + + + + + + + + + diff --git a/Documentation/logos/dex-glyph-white.png b/Documentation/logos/dex-glyph-white.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7215c9ac2eabc42141dc7f018436cecafebb36 GIT binary patch literal 10505 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 z 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 + + + + + + + + + + + + diff --git a/Documentation/logos/dex-horizontal-color.png b/Documentation/logos/dex-horizontal-color.png new file mode 100644 index 0000000000000000000000000000000000000000..98a85a9643f76fae3ab4dc90a92c91a003263cf9 GIT binary patch literal 24829 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 + + + + + + + + + + + + + + + + + diff --git a/Documentation/logos/dex-horizontal-white.png b/Documentation/logos/dex-horizontal-white.png new file mode 100644 index 0000000000000000000000000000000000000000..8f072508f9efe14977e5e518e8e6b99473b4810c GIT binary patch literal 24387 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 F0RZ$*T?haG literal 0 HcmV?d00001 diff --git a/Documentation/logos/dex-horizontal-white.svg b/Documentation/logos/dex-horizontal-white.svg new file mode 100644 index 00000000..b828ae0c --- /dev/null +++ b/Documentation/logos/dex-horizontal-white.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + From a52e324f6859ae248d4a3491e805f3c23dafb682 Mon Sep 17 00:00:00 2001 From: Eric Chiang Date: Tue, 8 Nov 2016 11:51:59 -0800 Subject: [PATCH 2/2] *: readme updates for v2 --- Documentation/api.md | 2 +- Documentation/getting-started.md | 47 ++++++++++++++++++++ README.md | 73 +++++++++----------------------- examples/config-dev.yaml | 28 ++++++------ 4 files changed, 84 insertions(+), 66 deletions(-) create mode 100644 Documentation/getting-started.md diff --git a/Documentation/api.md b/Documentation/api.md index a7a5612b..5171b5e1 100644 --- a/Documentation/api.md +++ b/Documentation/api.md @@ -107,7 +107,7 @@ Between v1 and v2, dex switched from REST to gRPC. This largely stemmed from pro Many arguments _against_ gRPC cite short term convenience rather than production use cases. Though this is a recognized shortcoming, dex already implements many features for developer convenience. For instance, users who wish to manually edit clients during testing can use the `staticClients` config field instead of the API. [grpc]: http://www.grpc.io/ -[api-proto]: https://github.com/coreos/dex/blob/v2.0.0-alpha.5/api/api.proto +[api-proto]: ../api/api.proto [protoc]: https://github.com/google/protobuf/releases [protoc-gen-go]: https://github.com/golang/protobuf [google-apis]: https://github.com/google/apis-client-generator diff --git a/Documentation/getting-started.md b/Documentation/getting-started.md new file mode 100644 index 00000000..25cac5ab --- /dev/null +++ b/Documentation/getting-started.md @@ -0,0 +1,47 @@ +# Getting started + +## Building the dex binary + +Dex requires a Go installation and a GOPATH configured. For setting up a Go workspace, refer to the [official documentation][go-setup]. Clone it down the correct place, and simply type `make` to compile the dex binary. + +``` +$ git clone https://github.com/coreos/dex.git $GOPATH/src/github.com/coreos/dex +$ cd $GOPATH/src/github.com/coreos/dex +$ make +``` + +## Configuration + +Dex exclusively pulls configuration options from a config file. Use the [example config][example-config] file found in the `examples/` directory to start an instance of dex with an in-memory data store and a set of predefined OAuth2 clients. + +``` +./bin/dex serve examples/config-dev.yaml +``` + +The [example config][example-config] file documents many of the configuration options through inline comments. For extra config options, look at that file. + +## Running a client + +Dex operates like most other OAuth2 providers. Users are redirected from a client app to dex to login. Dex ships with an example client app (also built with the `make` command), for testing and demos. + +By default, the example client is configured with the same OAuth2 credentials defined in `examples/config-dev.yaml` to talk to dex. Running the example app will cause it to query dex's [discovery endpoint][oidc-discovery] and determine the OAuth2 endpoints. + +``` +./bin/example-app +``` + +Login to dex through the example app using the following steps. + +1. Navigate to the example app in your browser at http://localhost:5555/ in your browser. +2. Hit "login" on the example app to be redirected to dex. +3. Choose the "Login with Email" and enter "admin@example.com" and "password" +4. Approve the example app's request. +5. See the resulting token the example app claims from dex. + +## Further reading + +Check out the Documentation directory for further reading on setting up different storages, interacting with the dex API, intros for OpenID Connect, and logging in through other identity providers such as Google, GitHub, or LDAP. + +[go-setup]: https://golang.org/doc/install +[example-config]: ../examples/config-dev.yaml +[oidc-discovery]: https://openid.net/specs/openid-connect-discovery-1_0-17.html#ProviderMetadata diff --git a/README.md b/README.md index f9ae424e..c7ec586b 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,32 @@ # dex - A federated OpenID Connect provider -![Caution image](Documentation/img/caution.png) +[![GoDoc](https://godoc.org/github.com/coreos/dex?status.svg)](https://godoc.org/github.com/coreos/dex) -__This is an experimental version of dex that is likely to change in -incompatible ways.__ +![logo](Documentation/logos/dex-horizontal-color.png) -dex is an OAuth2 server that presents clients with a low overhead framework for -identifying users while leveraging existing identity services such as Google -Accounts, FreeIPA, GitHub, etc, for actual authentication. dex sits between your -applications and an identity service, providing a backend agnostic flavor of -OAuth2 called [OpenID Connect](https://openid.net/connect/), a spec will allows -dex to support: +Dex is an OpenID Connect server that allows users to login through upstream identity providers. Clients use a standards-based OAuth2 flow to login users, while the actual authentication is performed by established user management systems such as Google, GitHub, FreeIPA, etc. -* Short-lived, signed tokens with predefined fields (such as email) issued on -behalf of users. -* Well known discovery of OAuth2 endpoints. +[OpenID Connect][openid-connect] is a flavor of OAuth that builds on top of OAuth2 using the JOSE standards. This allows dex to provide: + +* Short-lived, signed tokens with standard fields (such as email) issued on behalf of users. +* "well-known" discovery of OAuth2 endpoints. * OAuth2 mechanisms such as refresh tokens and revocation for long term access. * Automatic signing key rotation. -Any system which can query dex can cryptographically verify a users identity -based on these tokens, allowing authentication events to be passed between -backend services. +Standards-based token responses allows applications to interact with any OpenID Connect server instead of writing backend specific "access_token" dances. Systems that can already consume ID Tokens issued by dex include: -One such application that consumes OpenID Connect tokens is the [Kubernetes]( -http://kubernetes.io/) API server, allowing dex to provide identity for any -Kubernetes clusters. +* [Kubernetes][kubernetes] +* [Amazon STS][amazon-sts] -## Getting started +## Documentation -dex requires a Go installation and a GOPATH configured. Clone it down the -correct place, and simply type `make` to compile dex. +* [Getting started](Documentation/getting-started.md) +* [Storage options](Documentation/storage.md) +* [Intro to OpenID Connect](Documentation/openid-connect.md) +* [gRPC API](Documentation/api.md) +* Identity provider logins (coming soon!) +* Client libraries (coming soon!) -``` -git clone https://github.com/coreos/dex.git $GOPATH/src/github.com/coreos/dex -cd $GOPATH/src/github.com/coreos/dex -git checkout dev -make -``` - -dex is a single, scalable binary that pulls all configuration from a config -file (no command line flags at the moment). Use one of the config files defined -in the `examples` folder to start up dex with an in-memory data store. - -``` -./bin/dex serve examples/config-dev.yaml -``` - -dex allows OAuth2 clients to be defined statically through the config file. In -another window, run the `example-app` (an OAuth2 client). By default this is -configured to use the client ID and secret defined in the config file. - -``` -./bin/example-app -``` - -Then to interact with dex, like any other OAuth2 provider, you must first visit -a client app, then be prompted to login through dex. This can be achieved using -the following steps: - -1. Navigate to http://localhost:5555/ in your browser. -2. Hit "login" on the example app to be redirected to dex. -3. Choose the "Login with Email" and enter "admin@example.com" and "password" -4. Approve the example app's request. -5. See the resulting token the example app claims from dex. +[openid-connect]: https://openid.net/connect/ +[kubernetes]: http://kubernetes.io/docs/admin/authentication/#openid-connect-tokens +[amazon-sts]: https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html diff --git a/examples/config-dev.yaml b/examples/config-dev.yaml index 134f2766..5a37db81 100644 --- a/examples/config-dev.yaml +++ b/examples/config-dev.yaml @@ -1,29 +1,38 @@ # The base path of dex and the external name of the OpenID Connect service. -# Clients use this value to do discovery. +# This is the canonical URL that all clients MUST use to refer to dex. If a +# path is provided, dex's HTTP service will listen at a non-root URL. issuer: http://127.0.0.1:5556/dex # The storage configuration determines where dex stores its state. Supported # options include SQL flavors and Kubernetes third party resources. +# +# See the storage document at Documentation/storage.md for further information. storage: type: sqlite3 config: file: examples/dex.db -# Configuration for the +# Configuration for the HTTP endpoints. web: http: 127.0.0.1:5556 - # HTTPS options are also supported: + # Uncomment for HTTPS options. # https: 127.0.0.1:5554 # tlsCert: /etc/dex/tls.crt # tlsKey: /etc/dex/tls.key -# Uncomment this block to enable the gRPC API. +# Uncomment this block to enable the gRPC API. This values MUST be different +# from the HTTP endpoints. # grpc: # addr: 127.0.0.1:5557 # tlsCert: /etc/dex/grpc.crt # tlsKey: /etc/dex/grpc.key # tlsClientCA: /etc/dex/client.crt +# Uncomment this block to enable configuration for the expiration time durations. +# expiry: +# signingKeys: "6h" +# idTokens: "24h" + # Instead of reading from an external storage, use this list of clients. # # If this option isn't choosen clients may be added through the gRPC API. @@ -43,12 +52,12 @@ connectors: # name: Google # config: # issuer: https://accounts.google.com -# # Config values starting with a "$" will read from the environment. +# # Connector config values starting with a "$" will read from the environment. # clientID: $GOOGLE_CLIENT_ID # clientSecret: $GOOGLE_CLIENT_SECRET -# redirectURI: http://127.0.0.1:5556/dex/callback/google +# redirectURI: http://127.0.0.1:5556/dex/google -# Let dex keep a list of passwords which can be used to login the user +# Let dex keep a list of passwords which can be used to login to dex. enablePasswordDB: true # A static list of passwords to login the end user. By identifying here, dex @@ -61,8 +70,3 @@ staticPasswords: hash: "$2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy" username: "admin" userID: "08a8684b-db88-4b73-90a9-3cd1661f5466" - -# Uncomment this block to enable configuration for the expiration time durations. -# expiry: -# signingKeys: "6h" -# idTokens: "24h"