https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>
Configure the github
identity provider to validate user names and passwords against GitHub or GitHub Enterprise’s OAuth authentication server. OAuth facilitates a token exchange flow between OKD and GitHub or GitHub Enterprise.
You can use the GitHub integration to connect to either GitHub or GitHub Enterprise. For GitHub Enterprise integrations, you must provide the hostname
of your instance and can optionally provide a ca
certificate bundle to use in requests to the server.
The following steps apply to both GitHub and GitHub Enterprise unless noted. |
By default, only a kubeadmin
user exists on your cluster. To specify an
identity provider, you must create a custom resource (CR) that describes
that identity provider and add it to the cluster.
OKD user names containing |
Configuring GitHub authentication allows users to log in to OKD with their GitHub credentials. To prevent anyone with any GitHub user ID from logging in to your OKD cluster, you can restrict access to only those in specific GitHub organizations.
To use GitHub or GitHub Enterprise as an identity provider, you must register an application to use.
Register an application on GitHub:
For GitHub, click Settings → Developer settings → OAuth Apps → Register a new OAuth application.
For GitHub Enterprise, go to your GitHub Enterprise home page and then click Settings → Developer settings → Register a new application.
Enter an application name, for example My OpenShift Install
.
Enter a homepage URL, such as
https://oauth-openshift.apps.<cluster-name>.<cluster-domain>
.
Optional: Enter an application description.
Enter the authorization callback URL, where the end of the URL contains the
identity provider name
:
https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name>
For example:
https://oauth-openshift.apps.openshift-cluster.example.com/oauth2callback/github
Click Register application. GitHub provides a client ID and a client secret. You need these values to complete the identity provider configuration.
Identity providers use OKD Secret
objects in the openshift-config
namespace to contain the client secret, client certificates, and keys.
Create a Secret
object containing a string by using the following command:
$ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
You can alternatively apply the following YAML to create the secret:
|
You can define a Secret
object containing the contents of a file by using the following command:
$ oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config
Identity providers use OKD ConfigMap
objects in the openshift-config
namespace to contain the certificate authority bundle. These are primarily
used to contain certificate bundles needed by the identity provider.
This procedure is only required for GitHub Enterprise. |
Define an OKD ConfigMap
object containing the
certificate authority by using the following command. The certificate
authority must be stored in the ca.crt
key of the ConfigMap
object.
$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
You can alternatively apply the following YAML to create the config map:
|
The following custom resource (CR) shows the parameters and acceptable values for a GitHub identity provider.
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: githubidp (1)
mappingMethod: claim (2)
type: GitHub
github:
ca: (3)
name: ca-config-map
clientID: {...} (4)
clientSecret: (5)
name: github-secret
hostname: ... (6)
organizations: (7)
- myorganization1
- myorganization2
teams: (8)
- myorganization1/team-a
- myorganization2/team-b
1 | This provider name is prefixed to the GitHub numeric user ID to form an identity name. It is also used to build the callback URL. |
2 | Controls how mappings are established between this provider’s identities and User objects. |
3 | Optional: Reference to an OKD ConfigMap object containing the
PEM-encoded certificate authority bundle to use in validating server
certificates for the configured URL. Only for use in GitHub Enterprise
with a non-publicly trusted root certificate. |
4 | The client ID of a
registered GitHub OAuth
application. The application must be configured with a callback URL of
https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/<idp-provider-name> . |
5 | Reference to an OKD Secret object containing the client secret
issued by GitHub. |
6 | For GitHub Enterprise, you must provide the hostname of your instance, such as
example.com . This value must match the GitHub Enterprise hostname value in
in the /setup/settings file and cannot include a port number. If this
value is not set, then either teams or organizations must be defined.
For GitHub, omit this parameter. |
7 | The list of organizations. Either the organizations or teams field must be set unless the hostname field is set, or if mappingMethod is set to lookup . Cannot be used in combination with the teams field. |
8 | The list of teams. Either the teams or organizations field must be set unless the hostname field is set, or if mappingMethod is set to lookup . Cannot be used in combination with the organizations field. |
If |
See Identity provider parameters for information on parameters, such as mappingMethod
, that are common to all identity providers.
After you install your cluster, add an identity provider to it so your users can authenticate.
Create an OKD cluster.
Create the custom resource (CR) for your identity providers.
You must be logged in as an administrator.
Apply the defined CR:
$ oc apply -f </path/to/CR>
If a CR does not exist, |
Obtain a token from the OAuth server.
As long as the kubeadmin
user has been removed, the oc login
command provides instructions on how to access a web page where you can retrieve the token.
You can also access this page from the web console by navigating to (?) Help → Command Line Tools → Copy Login Command.
Log in to the cluster, passing in the token to authenticate.
$ oc login --token=<token>
This identity provider does not support logging in with a user name and password. |
Confirm that the user logged in successfully, and display the user name.
$ oc whoami