From c400e860feec125fa9f9a30e507318edf04f183f Mon Sep 17 00:00:00 2001 From: Eric Chiang <eric.chiang@coreos.com> Date: Fri, 21 Apr 2017 14:22:46 -0700 Subject: [PATCH] Documentation: more diagrams --- Documentation/img/dex-backend-flow.png | Bin 0 -> 29612 bytes Documentation/using-dex.md | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 Documentation/img/dex-backend-flow.png diff --git a/Documentation/img/dex-backend-flow.png b/Documentation/img/dex-backend-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..457394227749285f3d432fd5919044e8f2feff02 GIT binary patch literal 29612 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 TR82$x=-5b4S3j3^P6<r_R@sqL literal 0 HcmV?d00001 diff --git a/Documentation/using-dex.md b/Documentation/using-dex.md index 8ac230fa..1e2076d5 100644 --- a/Documentation/using-dex.md +++ b/Documentation/using-dex.md @@ -138,6 +138,8 @@ A more thorough discussion of these kinds of best practices can be found in the Apps can also choose to consume ID tokens, letting other trusted clients handle the web flows for login. Clients pass along the ID tokens they receive from dex, usually as a bearer token, letting them act at the user to the backend service. +![][dex-backend-flow] + To accept ID tokens as user credentials, an app would construct an OpenID Connect verifier similarly to the above example. The verifier validates the ID token's signature, ensures it hasn't expired, etc. An important part of this code is that the verifier only trusts the example app's client. This ensures the example app is the one who's using the ID token, and not another, untrusted client. ```go @@ -182,6 +184,7 @@ func authorize(ctx context.Context, bearerToken string) (*user, error) { [api-server]: https://kubernetes.io/docs/admin/authentication/#openid-connect-tokens [dex-flow]: img/dex-flow.png +[dex-backend-flow]: img/dex-backend-flow.png [example-app]: ../cmd/example-app [oauth2-threat-model]: https://tools.ietf.org/html/rfc6819 [go-oidc]: https://godoc.org/github.com/coreos/go-oidc -- GitLab