32 |
33 | {{% blocks/feature icon="text-white fa-puzzle-piece" %}}
34 |
35 | Dex supports a wide range of identity providers such as
LDAP,
SAML, and
OAuth2 and implements
OpenID Connect (OIDC), allowing your application to plug in any upstream identity provider, but implement only OIDC.
36 |
37 | {{% /blocks/feature %}}
38 | {{% blocks/feature icon="text-white fa-lock" %}}
39 |
40 | Whether you’re looking to secure your internal applications, provide seamless Single Sign-On (SSO) across your organization, or create a secure public-facing platform, Dex can be tailored to meet your unique requirements.
41 |
42 | {{% /blocks/feature %}}
43 |
44 | {{% /blocks/lead %}}
45 |
46 | {{% blocks/section color="white" %}}
47 |
48 |
49 |
50 |
51 |
52 |
53 | Dex is a Cloud Native Computing Foundation sandbox project.
54 |
55 |
56 | {{% /blocks/section %}}
57 |
--------------------------------------------------------------------------------
/content/docs/connectors/bitbucketcloud.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Authentication Through Bitbucket Cloud"
3 | linkTitle: "Bitbucket Cloud"
4 | description: ""
5 | date: 2020-09-30
6 | draft: false
7 | toc: true
8 | weight: 2100
9 | ---
10 |
11 | ## Overview
12 |
13 | One of the login options for dex uses the Bitbucket OAuth2 flow to identify the end user through their Bitbucket account.
14 |
15 | When a client redeems a refresh token through dex, dex will re-query Bitbucket to update user information in the ID Token. To do this, __dex stores a readonly Bitbucket access token in its backing datastore.__ Users that reject dex's access through Bitbucket will also revoke all dex clients which authenticated them through Bitbucket.
16 |
17 | ## Configuration
18 |
19 | Register a new OAuth consumer with [Bitbucket](https://confluence.atlassian.com/bitbucket/oauth-on-bitbucket-cloud-238027431.html) ensuring the callback URL is `(dex issuer)/callback`. For example if dex is listening at the non-root path `https://auth.example.com/dex` the callback would be `https://auth.example.com/dex/callback`.
20 |
21 | There are several permissions required for an OAuth consumer to use it with Dex:
22 | * `Account: Read` - required for extracting base information (email, username)
23 | * `Workspace membership: Read` - only necessary to get user's teams
24 |
25 | The following is an example of a configuration for `examples/config-dev.yaml`:
26 |
27 | ```yaml
28 | connectors:
29 | - type: bitbucket-cloud
30 | # Required field for connector id.
31 | id: bitbucket-cloud
32 | # Required field for connector name.
33 | name: Bitbucket Cloud
34 | config:
35 | # Credentials can be string literals or pulled from the environment.
36 | clientID: $BITBUCKET_CLIENT_ID
37 | clientSecret: $BITBUCKET_CLIENT_SECRET
38 | redirectURI: http://127.0.0.1:5556/dex/callback
39 | # Optional teams whitelist, communicated through the "groups" scope.
40 | # If `teams` is omitted, all of the user's Bitbucket teams are returned when the groups scope is present.
41 | # If `teams` is provided, this acts as a whitelist - only the user's Bitbucket teams that are in the configured `teams` below will go into the groups claim. Conversely, if the user is not in any of the configured `teams`, the user will not be authenticated.
42 | teams:
43 | - my-team
44 | # Optional parameter to include team groups.
45 | # If enabled, the groups claim of dex id_token will looks like this:
46 | # ["my_team", "my_team/administrators", "my_team/members"]
47 | includeTeamGroups: true
48 | ```
49 |
--------------------------------------------------------------------------------
/layouts/index.redirects:
--------------------------------------------------------------------------------
1 | # Netlify redirects. See https://www.netlify.com/docs/redirects/
2 | {{/* cSpell:ignore cond wordmark */ -}}
3 |
4 | {{ range $p := .Site.Pages -}}
5 |
6 | {{ range $p.Params.redirects -}}
7 | {{ $from := cond (strings.HasPrefix .from "/")
8 | .from
9 | (print $p.RelPermalink .from) -}}
10 | {{ $to := cond (strings.HasPrefix .to "/")
11 | .to
12 | (print $p.RelPermalink .to) -}}
13 | {{ $from | printf "%-35s" }} {{ $to }}
14 | {{ end -}}
15 |
16 | {{ range $p.Aliases -}}
17 | {{/* Temporary workaround for semconv alias errors */ -}}
18 | {{ if strings.HasPrefix . "docs/specs/semconv/general" -}}
19 | {{ . | printf "%-35s" }} {{ $p.RelPermalink }}
20 | {{ else -}}
21 | {{ $alias := cond (strings.HasPrefix . "/")
22 | .
23 | (partial "relative-redirects-alias" (dict "alias" . "p" $p.Parent)) -}}
24 | {{ $alias | printf "%-35s" }} {{ $p.RelPermalink }}
25 | {{ end -}}
26 | {{ end -}}
27 |
28 | {{ with $p.Params.redirect -}}
29 | {{ $p.RelPermalink | printf "%-35s" }} {{ . }}
30 | {{ end -}}
31 |
32 | {{ end }}{{/* range $p */ -}}
33 |
34 | {{ $languages := (.Site.GetPage "/docs/instrumentation").Pages -}}
35 | {{ range $languages -}}
36 | {{ $lang := .File.ContentBaseName -}}
37 | {{ if ne $lang "other" -}}
38 | /docs/{{ $lang }} /docs/instrumentation/{{ $lang }}
39 | /docs/{{ $lang }}/* /docs/instrumentation/{{ $lang }}/:splat
40 | {{ end -}}
41 | {{ end -}}
42 |
43 | /docs/reference/specification /docs/specs/otel
44 | /docs/reference/specification/* /docs/specs/otel/:splat
45 | /docs/specification/otel/* /docs/specs/otel/:splat
46 |
47 | {{ $schemaFiles := partial "schema-file-list" . -}}
48 | {{ $latestSchemaFile := index $schemaFiles 0 -}}
49 |
50 | /schemas/latest /schemas/{{ $latestSchemaFile.Name }}
51 |
52 | {{/*
53 | Social-media image redirects. As mentioned in
54 | https://developers.facebook.com/docs/sharing/webmasters/images, we need to
55 | preserve og:image (and other social media image) URLs forever.
56 | */ -}}
57 |
58 | {{ $og_image_current := `/img/social/logo-wordmark-001.png` -}}
59 |
60 | /featured-background.jpg {{ $og_image_current }} {{- /* homepage og:image used prior to 2022/08 */}}
61 |
62 | {{- define "partials/relative-redirects-alias" -}}
63 | {{ $result := "" }}
64 | {{ if strings.HasPrefix .alias "../" }}
65 | {{ $result = (partial "relative-redirects-alias"
66 | (dict
67 | "alias" (strings.TrimPrefix "../" .alias)
68 | "p" .p.Parent ))
69 | }}
70 | {{ else }}
71 | {{ $result = path.Join .p.RelPermalink .alias }}
72 | {{ end }}
73 | {{ return $result }}
74 | {{ end }}
75 |
--------------------------------------------------------------------------------
/content/docs/connectors/oauth.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Authentication Through an OAuth 2.0 Provider"
3 | linkTitle: "OAuth 2.0"
4 | description: ""
5 | date: 2021-03-15
6 | toc: true
7 | weight: 2055
8 | ---
9 |
10 | ## Overview
11 |
12 | Dex users can make use of this connector to work with standards-compliant [OAuth 2.0](https://oauth.net/2/) authorization providers, in case those authorization providers are not already in the Dex connectors list.
13 |
14 | ## Configuration
15 |
16 | The following is an example of a configuration for using OAuth connector with Reddit.
17 |
18 | ```yaml
19 | connectors:
20 | - type: oauth
21 | # ID of OAuth 2.0 provider
22 | id: reddit
23 | # Name of OAuth 2.0 provider
24 | name: reddit
25 | config:
26 | # Connector config values starting with a "$" will read from the environment.
27 | clientID: $REDDIT_CLIENT_ID
28 | clientSecret: $REDDIT_CLIENT_SECRET
29 | redirectURI: http://127.0.0.1:5556/dex/callback
30 |
31 | tokenURL: https://www.reddit.com/api/v1/access_token
32 | authorizationURL: https://www.reddit.com/api/v1/authorize
33 | userInfoURL: https://www.reddit.com/api/v1/me
34 |
35 | # Optional: Some providers return claims without "email_verified", when they had no usage of emails verification in enrollment process
36 | # or if they are acting as a proxy for another IDP etc AWS Cognito with an upstream SAML IDP
37 | # This can be overridden with the below option
38 | # insecureSkipEmailVerified: true
39 |
40 | # Optional: Specify whether to communicate to Auth provider without
41 | # validating SSL certificates
42 | # insecureSkipVerify: false
43 |
44 | # Optional: The location of file containing SSL certificates to communicate
45 | # to Auth provider
46 | # rootCAs:
47 | # - /etc/ssl/reddit.pem
48 |
49 | # Optional: List of scopes to request Auth provider for access user account
50 | # scopes:
51 | # - identity
52 |
53 | # Optional: Configurable keys for user ID look up
54 | # Default: id
55 | # userIDKey:
56 |
57 | # Auth providers return non-standard user identity profile
58 | # Use claimMapping to map those user informations to standard claims:
59 | claimMapping:
60 | # Optional: Configurable keys for user name look up
61 | # Default: user_name
62 | # userNameKey:
63 |
64 | # Optional: Configurable keys for preferred username look up
65 | # Default: preferred_username
66 | # preferredUsernameKey:
67 |
68 | # Optional: Configurable keys for user groups look up
69 | # Default: groups
70 | # groupsKey:
71 |
72 | # Optional: Configurable keys for email look up
73 | # Default: email
74 | # emailKey:
75 |
76 | # Optional: Configurable keys for email verified look up
77 | # Default: email_verified
78 | # emailVerifiedKey:
79 | ```
80 |
--------------------------------------------------------------------------------
/content/docs/connectors/gitlab.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Authentication Through GitLab"
3 | linkTitle: "GitLab"
4 | description: ""
5 | date: 2020-09-30
6 | draft: false
7 | toc: true
8 | weight: 2040
9 | ---
10 |
11 | ## Overview
12 |
13 | GitLab is a web-based Git repository manager with wiki and issue tracking features, using an open source license, developed by GitLab Inc. One of the login options for dex uses the GitLab OAuth2 flow to identify the end user through their GitLab account. You can use this option with [gitlab.com](https://gitlab.com), GitLab community or enterprise edition.
14 |
15 | When a client redeems a refresh token through dex, dex will re-query GitLab to update user information in the ID Token. To do this, __dex stores a readonly GitLab access token in its backing datastore.__ Users that reject dex's access through GitLab will also revoke all dex clients which authenticated them through GitLab.
16 |
17 | ## Configuration
18 |
19 | Register a new application via `User Settings -> Applications` ensuring the callback URL is `(dex issuer)/callback`. For example if dex is listening at the non-root path `https://auth.example.com/dex` the callback would be `https://auth.example.com/dex/callback`.
20 |
21 | The application requires the user to grant the `read_user` and `openid` scopes. The latter is required only if group membership is a desired claim.
22 |
23 | The following is an example of a configuration for `examples/config-dev.yaml`:
24 |
25 | ```yaml
26 | connectors:
27 | - type: gitlab
28 | # Required field for connector id.
29 | id: gitlab
30 | # Required field for connector name.
31 | name: GitLab
32 | config:
33 | # optional, default = https://gitlab.com
34 | baseURL: https://gitlab.com
35 | # Credentials can be string literals or pulled from the environment.
36 | clientID: $GITLAB_APPLICATION_ID
37 | clientSecret: $GITLAB_CLIENT_SECRET
38 | redirectURI: http://127.0.0.1:5556/dex/callback
39 | # Optional groups whitelist, communicated through the "groups" scope.
40 | # If `groups` is omitted, all of the user's GitLab groups are returned when the groups scope is present.
41 | # If `groups` is provided, this acts as a whitelist - only the user's GitLab groups that are in the configured `groups` below will go into the groups claim. Conversely, if the user is not in any of the configured `groups`, the user will not be authenticated.
42 | groups:
43 | - my-group
44 | # flag which will switch from using the internal GitLab id to the users handle (@mention) as the user id.
45 | # It is possible for a user to change their own user name but it is very rare for them to do so
46 | useLoginAsID: false
47 | # Flag to include user group permissions in the user groups.
48 | # For example, if the user has maintainer access to a GitLab group named "project/group1",
49 | # the user's groups will reflect two entries: "project/group1" and "project/group1:maintainer".
50 | getGroupsPermission: false
51 | ```
52 |
--------------------------------------------------------------------------------
/content/docs/configuration/oauth2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "OAuth2"
3 | description: "OAuth2 flow customization options"
4 | date: 2024-01-05
5 | draft: false
6 | toc: true
7 | weight: 1060
8 | ---
9 | Dex provides a range of configurable options that empower you to fine-tune and personalize various aspects of the authentication and user flow.
10 |
11 | ## Flow Customization
12 | Customize OAuth2 settings to align with your authentication requirements.
13 |
14 | ```yaml
15 | oauth2:
16 | responseTypes: [ "code" ]
17 | skipApprovalScreen: true
18 | alwaysShowLoginScreen: false
19 | ```
20 |
21 | ### Authentication flow
22 | * `responseTypes` - allows you to configure the desired auth flow (`Authorization Code Flow`, `Implicit Flow`, or `Hybrid Flow`) based on different values. See the table below for valid configuration options.
23 |
24 | | `responseTypes` value | flow |
25 | |------------------------|-------------------------|
26 | | `code` | Authorization Code Flow |
27 | | `id_token` | Implicit Flow |
28 | | `id_token token` | Implicit Flow |
29 | | `code id_token` | Hybrid Flow |
30 | | `code token` | Hybrid Flow |
31 | | `code id_token token` | Hybrid Flow |
32 | Examples of the different flows and their behavior can be found in the [official openid spec](https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationExamples).
33 |
34 | ### User flow
35 |
36 | Customizing the user flow allows you to influence how users login into your application.
37 |
38 | * `skipApprovalScreen` - controls the need for user approval before sharing data with connected applications. If enabled, users must approve data sharing with every auth flow.
39 | {{% alert color="info" %}}
40 | This setting is not applicable when the request has the `approval_prompt=force` parameter. In this case, the approval screen is always shown.
41 | {{% /alert %}}
42 | * `alwaysShowLoginScreen` - whether to always display the login screen. If only one authentication method is enabled, the default behavior is to go directly to it. For connected IdPs, this redirects the browser away from the application to upstream provider, such as the Google login page.
43 |
44 | ## Password grants
45 | Password grants involve clients directly sending a user's credentials (`username` and `password`) to the authorization server (dex), acquiring access tokens without the need for an intermediate authorization step.
46 | ```yaml
47 | oauth2:
48 | passwordConnector: local
49 | ```
50 | * `passwordConnector` - specifies the connector's id that is used for password grants
51 |
52 | {{% alert title="Warning" color="warning" %}}
53 | The password grant type is not recommended for use by the [OAuth 2.0 Security Best Current Practice](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13#section-3.4) because of serious security concerns.
54 | Please see [oauth.net](https://oauth.net/2/grant-types/password/) for additional information.
55 | {{% /alert %}}
56 |
--------------------------------------------------------------------------------
/assets/sass/custom.sass:
--------------------------------------------------------------------------------
1 | // Custom.scss
2 | @charset "utf-8"
3 |
4 | {{ $extraColors := site.Params.colors.extra }}
5 | {{ $fontAwesomeVersion := site.Params.font_awesome_version }}
6 | {{ $fonts := site.Params.fonts }}
7 |
8 | {{ with $fontAwesomeVersion }}
9 | {{ $fontAwesomeUrl := printf "https://use.fontawesome.com/releases/v%s/css/all.css" . }}
10 | @import url("{{ $fontAwesomeUrl }}")
11 | {{ end }}
12 |
13 | {{ if $fonts }}
14 | {{ $fontSlice := (slice) }}
15 | {{ range $fonts }}
16 | {{ $fontSlice = $fontSlice | append (printf "%s:%s" (replace .name " " "+") (delimit .sizes ",")) }}
17 | {{ end }}
18 | {{ $fontsUrl := printf "https://fonts.googleapis.com/css?family=%s" (delimit $fontSlice "|") }}
19 | @import url("{{ $fontsUrl }}")
20 | {{ end }}
21 |
22 |
23 | // Required
24 | @import "bootstrap/scss/functions"
25 | @import "bootstrap/scss/variables"
26 | @import "bootstrap/scss/mixins"
27 | @import "bootstrap/scss/root"
28 |
29 | //Optional
30 | @import "bootstrap/scss/reboot"
31 | @import "bootstrap/scss/type"
32 | @import "bootstrap/scss/images"
33 | @import "bootstrap/scss/code"
34 | @import "bootstrap/scss/grid"
35 | @import "bootstrap/scss/tables"
36 | @import "bootstrap/scss/forms"
37 | @import "bootstrap/scss/buttons"
38 | @import "bootstrap/scss/transitions"
39 | @import "bootstrap/scss/dropdown"
40 | //@import "bootstrap/scss/button-group"
41 | //@import "bootstrap/scss/input-group"
42 | //@import "bootstrap/scss/custom-forms"
43 | @import "bootstrap/scss/nav"
44 | @import "bootstrap/scss/navbar"
45 | //@import "bootstrap/scss/card"
46 | //@import "bootstrap/scss/breadcrumb"
47 | //@import "bootstrap/scss/pagination"
48 | //@import "bootstrap/scss/badge"
49 | @import "bootstrap/scss/jumbotron"
50 | //@import "bootstrap/scss/alert"
51 | //@import "bootstrap/scss/progress"
52 | //@import "bootstrap/scss/media"
53 | //@import "bootstrap/scss/list-group"
54 | //@import "bootstrap/scss/close"
55 | //@import "bootstrap/scss/toasts"
56 | //@import "bootstrap/scss/modal"
57 | //@import "bootstrap/scss/tooltip"
58 | //@import "bootstrap/scss/popover"
59 | //@import "bootstrap/scss/carousel"
60 | //@import "bootstrap/scss/spinners"
61 | @import "bootstrap/scss/utilities"
62 | //@import "bootstrap/scss/print"
63 |
64 |
65 | // Custom
66 |
67 | $font-family-headers: "Fira Sans"
68 |
69 | .logo
70 | max-width: 85px
71 |
72 | .breadcrumb
73 | li
74 | list-style: none
75 | display: inline
76 | ul
77 | padding-left: 0
78 |
79 | .hashlink
80 | font-size: smaller !important
81 |
82 | .highlight pre
83 | padding: 0.5rem
84 | border-radius: 5px
85 |
86 | .content
87 | table
88 | @extend .table
89 |
90 | img
91 | @extend .img-fluid
92 |
93 | h1, h2, h3, h4, h5, h6
94 | font-family: $font-family-headers
95 | scroll-margin-top: 5rem
96 | margin-top: 1.8rem
97 |
98 | nav
99 | ul
100 | list-style-type: none
101 | padding-left: 0
102 | ul
103 | padding-left: 1.5rem
104 |
105 | .jumbotron img
106 | @extend .img-fluid
107 | max-width: 90%
108 | height: auto
109 |
110 | .jumbotron
111 | background-color: #86c6df65
112 | // background-color: transparent !important
113 |
--------------------------------------------------------------------------------
/content/docs/development/releases.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Releases"
3 | description: ""
4 | date: 2020-09-30
5 | draft: false
6 | toc: true
7 | weight: 3100
8 | ---
9 |
10 | Releasing a new version of Dex can be done by one of the core maintainers with push access to the
11 | [git repository](https://github.com/dexidp/dex).
12 | It's usually good to have an extra pair of eyes ready when tagging a new release though,
13 | so feel free to ask a peer to be ready in case anything goes wrong or you need a review.
14 |
15 | The release process is semi-automated at the moment: artifacts are automatically built and published to
16 | GitHub Container Registry (primary source of container images) and Docker Hub.
17 |
18 | The GitHub release needs to be manually created (use past releases as templates).
19 |
20 | > *Note:* this will hopefully be improved in the future.
21 |
22 |
23 | ## Tagging a new release
24 |
25 | Make sure you've [uploaded your GPG key](https://github.com/settings/keys) and
26 | configured git to [use that signing key](
27 | https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work) either globally or
28 | for the Dex repo. Note that the email the key is issued for must be the email
29 | you use for git.
30 |
31 | ```bash
32 | git config [--global] user.signingkey "{{ GPG key ID }}"
33 | git config [--global] user.email "{{ Email associated with key }}"
34 | ```
35 |
36 | Create a signed tag at the commit you wish to release.
37 |
38 | ```bash
39 | RELEASE_VERSION=v2.0.0
40 | git tag -s -m "Release $RELEASE_VERSION" $RELEASE_VERSION # optionally: commit hash as the last argument
41 | ```
42 |
43 | Push that tag to the Dex repo.
44 |
45 | ```bash
46 | git push origin $RELEASE_VERSION
47 | ```
48 |
49 | Draft releases on GitHub and summarize the changes since the last release.
50 | See [previous releases](https://github.com/dexidp/dex/releases) for the expected format.
51 |
52 |
53 | ## Patch releases
54 |
55 | Occasionally, patch releases might be necessary to fix an urgent bug or vulnerability.
56 |
57 | First, check if there is a release branch for a minor release. Create one if necessary:
58 |
59 | ```bash
60 | MINOR_RELEASE="v2.1.0"
61 | RELEASE_BRANCH="v2.1.x"
62 | git checkout -b $RELEASE_BRANCH tags/$MINOR_RELEASE
63 | git push origin $RELEASE_BRANCH
64 | ```
65 |
66 | If a patch version is needed (2.1.1, 2.1.2, etc.), checkout the desired release branch and cherry pick specific commits.
67 |
68 | ```bash
69 | RELEASE_BRANCH="v2.1.x"
70 | git checkout $RELEASE_BRANCH
71 | git checkout -b "cherry-picked-change"
72 | git cherry-pick (SHA of change)
73 | git push origin "cherry-picked-change"
74 | ```
75 |
76 | Open a PR onto `$RELEASE_BRANCH` to get the changes approved.
77 |
78 | Continue with the regular release process.
79 |
80 | ## Dex API
81 |
82 | If there are changes in the API, the API version should be bumped to appear correctly in
83 | the [pkg.go.dev](https://pkg.go.dev/github.com/dexidp/dex/api/v2) and be able to
84 | be pulled by tags (via go get or go modules).
85 |
86 | Create a new tag with the `api/` path:
87 | ```bash
88 | RELEASE_VERSION=v2.3.0
89 | git tag -s -m "${RELEASE_VERSION} Dex API release" "api/${RELEASE_VERSION}"
90 | ```
91 |
92 | Push that tag to the Dex repo.
93 |
94 | ```bash
95 | git push origin "api/${RELEASE_VERSION}"
96 | ```
97 |
--------------------------------------------------------------------------------
/content/docs/connectors/_index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Connectors"
3 | description: "Documentation about configuration of Dex connectors"
4 | date: 2020-01-07T14:59:38+01:00
5 | draft: false
6 | toc: true
7 | weight: 2000
8 | ---
9 |
10 | When a user logs in through Dex, the user's identity is usually stored in another user-management system: a LDAP directory, a GitHub org, etc. Dex acts as a shim between a client app and the upstream identity provider. The client only needs to understand OpenID Connect to query Dex, while Dex implements an array of protocols for querying other user-management systems.
11 |
12 | 
13 |
14 | A "connector" is a strategy used by Dex for authenticating a user against another identity provider. Dex implements connectors that target specific platforms such as GitHub, LinkedIn, and Microsoft as well as established protocols like LDAP and SAML.
15 |
16 | Depending on the connectors limitations in protocols can prevent Dex from issuing [refresh tokens][scopes] or returning [group membership][scopes] claims. For example, because SAML doesn't provide a non-interactive way to refresh assertions, if a user logs in through the SAML connector Dex won't issue a refresh token to its client. Refresh token support is required for clients that require offline access, such as `kubectl`.
17 |
18 | Dex implements the following connectors:
19 |
20 | | Name | supports refresh tokens | supports groups claim | supports preferred_username claim | status | notes |
21 | | ---- | ----------------------- | --------------------- | --------------------------------- | ------ | ----- |
22 | | [LDAP](/docs/connectors/ldap/) | yes | yes | yes | stable | |
23 | | [GitHub](/docs/connectors/github/) | yes | yes | yes | stable | |
24 | | [SAML 2.0](/docs/connectors/saml/) | no | yes | no | stable |
25 | | [GitLab](/docs/connectors/gitlab/) | yes | yes | yes | beta | |
26 | | [OpenID Connect](/docs/connectors/oidc/) | yes | yes | yes | beta | Includes Salesforce, Azure, etc. |
27 | | [OAuth 2.0](/docs/connectors/oauth/) | no | yes | yes | alpha |
28 | | [Google](/docs/connectors/google/) | yes | yes | yes | alpha | |
29 | | [LinkedIn](/docs/connectors/linkedin/) | yes | no | no | beta | |
30 | | [Microsoft](/docs/connectors/microsoft/) | yes | yes | no | beta | |
31 | | [AuthProxy](/docs/connectors/authproxy/) | no | no | no | alpha | Authentication proxies such as Apache2 mod_auth, etc. |
32 | | [Bitbucket Cloud](/docs/connectors/bitbucketcloud/) | yes | yes | no | alpha | |
33 | | [OpenShift](/docs/connectors/openshift/) | no | yes | no | stable | |
34 | | [Atlassian Crowd](/docs/connectors/atlassian-crowd/) | yes | yes | yes * | beta | preferred_username claim must be configured through config |
35 | | [Gitea](/docs/connectors/gitea/) | yes | no | yes | alpha | |
36 | | [OpenStack Keystone](/docs/connectors/keystone/) | yes | yes | no | alpha | |
37 |
38 |
39 | Stable, beta, and alpha are defined as:
40 |
41 | * Stable: well tested, in active use, and will not change in backward incompatible ways.
42 | * Beta: tested and unlikely to change in backward incompatible ways.
43 | * Alpha: may be untested by core maintainers and is subject to change in backward incompatible ways.
44 |
45 | All changes or deprecations of connector features will be announced in the [release notes.][release-notes]
46 |
47 | [scopes]: /docs/configuration/custom-scopes-claims-clients/#scopes
48 | [release-notes]: https://github.com/dexidp/dex/releases
49 |
--------------------------------------------------------------------------------
/content/docs/connectors/openshift.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Authentication using OpenShift"
3 | linkTitle: "OpenShift"
4 | description: ""
5 | date: 2020-09-30
6 | draft: false
7 | toc: true
8 | weight: 2110
9 | ---
10 |
11 | ## Overview
12 |
13 | Dex can make use of users and groups defined within OpenShift by querying the platform provided OAuth server.
14 |
15 | ## Configuration
16 |
17 |
18 | ### Creating an OAuth Client
19 |
20 | Two forms of OAuth Clients can be utilized:
21 |
22 | * [Using a Service Account as an OAuth Client](https://docs.openshift.com/container-platform/latest/authentication/using-service-accounts-as-oauth-client.html) (Recommended)
23 | * [Registering An Additional OAuth Client](https://docs.openshift.com/container-platform/latest/authentication/configuring-internal-oauth.html#oauth-register-additional-client_configuring-internal-oauth)
24 |
25 | #### Using a Service Account as an OAuth Client
26 |
27 | OpenShift Service Accounts can be used as a constrained form of OAuth client. Making use of a Service Account to represent an OAuth Client is the recommended option as it does not require elevated privileged within the OpenShift cluster. Create a new Service Account or make use of an existing Service Account.
28 |
29 | Patch the Service Account to add an annotation for location of the Redirect URI
30 |
31 | ```bash
32 | oc patch serviceaccount