Depending on your organization’s security policies, you might require to identify and authorize users before giving them access to resources, such as Red Hat Developer Hub.
In Developer Hub, authentication and authorization are two separate processes:
-
Authentication defines the user identity, and passes on this information to Developer Hub. Read the following chapters to configure authentication in Developer Hub.
-
Authorization defines what the authenticated identity can access or do in Developer Hub. See Authorization.
Tip
|
Not recommended for production
To explore Developer Hub features, you can enable the guest user to skip configuring authentication and authorization, log in as the guest user, and access all the features. |
The authentication system in Developer Hub is handled by external authentication providers.
Developer Hub supports following authentication providers:
-
Red Hat Single-Sign On (RHSSO)
-
GitHub
-
Microsoft Azure
To identify users in Developer Hub, configure:
-
One (and only one) authentication provider for sign-in and identification.
-
Optionally, additional authentication providers for identification, to add more information to the user identity, or enable access to additional external resources.
For each authentication provider, set up the shared secret that the authentication provider and Developer Hub require to communicate, first in the authentication provider, then in Developer Hub.
Developer Hub stores user identity information in the Developer Hub software catalog.
Tip
|
Not recommended for production
To explore the authentication system and use Developer Hub without authorization policies, you can bypass the Developer Hub software catalog and start using Developer Hub without provisioning the Developer Hub software catalog. |
To get, store, and update additional user information, such as group or team ownership, with the intention to use this data to define authorization policies, provision users and groups in the Developer Hub software catalog.
Important
|
Developer Hub uses a one-way synchronization system to provision users and groups from your authentication system to the Developer Hub software catalog. Therefore, deleting users and groups by using Developer Hub Web UI or REST API might have unintended consequences. |
Chapter 1. Authenticating with the Guest user
To explore Developer Hub features, you can skip configuring authentication and authorization. You can configure Developer Hub to log in as a Guest user and access Developer Hub features.
1.1. Authenticating with the Guest user on an Operator-based installation
After an Operator-based installation, you can configure Developer Hub to log in as a Guest user and access Developer Hub features.
-
You added a custom Developer Hub application configuration, and have sufficient permissions to modify it.
-
To enable the guest user in your Developer Hub custom configuration, edit your Developer Hub application configuration with following content:
app-config-rhdh.yaml
fragmentauth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: true
-
Go to the Developer Hub login page.
-
To log in with the Guest user account, click Enter in the Guest tile.
-
In the Developer Hub Settings page, your profile name is Guest.
-
You can use Developer Hub features.
1.2. Authenticating with the Guest user on a Helm-based installation
On a Helm-based installation, you can configure Developer Hub to log in as a Guest user and access Developer Hub features.
-
To enable the guest user in your Developer Hub custom configuration, configure your Red Hat Developer Hub Helm Chart with following content:
Red Hat Developer Hub Helm Chart configuration fragmentupstream: backstage: appConfig: app: baseUrl: 'https://{{- include "janus-idp.hostname" . }}' auth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: true
-
Go to the Developer Hub login page.
-
To log in with the Guest user account, click Enter in the Guest tile.
-
In the Developer Hub Settings page, your profile name is Guest.
-
You can use Developer Hub features.
Chapter 2. Enabling the Microsoft Azure authentication provider
Red Hat Developer Hub includes a Microsoft Azure authentication provider that can authenticate users by using OAuth.
-
To allow Developer Hub to authenticate with Microsoft Azure, create an OAuth Application in Microsoft Azure.
-
Go to Azure Portal > App registrations, and create an App Registration for Developer Hub.
-
On your App registration overview page, add a new Web platform configuration, with the configuration:
- Redirect URI
-
Enter the backend authentication URI set in Developer Hub:
https://<APP_FQDN>/api/auth/microsoft/handler/frame
- Front-channel logout URL
-
Leave blank.
- Implicit grant and hybrid flows
-
Leave all checkboxes cleared.
-
On the API permissions tab, click Add Permission, then add the following Delegated permission for the Microsoft Graph API:
-
email
-
offline_access
-
openid
-
profile
-
User.Read
-
Optional custom scopes of the Microsoft Graph API that you define both here and in the Developer Hub configuration (
app-config-rhdh.yaml
).NoteYour company might require you to grant admin consent for these permissions. Even if your company does not require admin consent, you might do so as it means users do not need to individually consent the first time they access backstage. To grant admin consent, a directory admin must go to the admin consent page and click Grant admin consent for COMPANY NAME.
-
-
Go to the Certificates & Secrets page, then the Client secrets tab, and create a new client secret. Save the Client secret for the next step.
-
-
Add your Microsoft Azure credentials in your Developer Hub secrets.
-
Edit your Developer Hub secrets, such as
secrets-rhdh
. -
Add the following key/value pairs:
-
AUTH_AZURE_CLIENT_ID
: Enter the Application ID that you generated on Microsoft Azure. -
AUTH_AZURE_CLIENT_SECRET
: Enter the Client secret that you generated on Microsoft Azure. -
AUTH_AZURE_TENANT_ID
: Enter your Tenant ID on Microsoft Azure.
-
-
-
Set up the Microsoft Azure authentication provider in your Developer Hub custom configuration.
Edit your custom Developer Hub config map, such as
app-config-rhdh
.In the
app-config-rhdh.yaml
content, add themicrosoft
provider configuration under the rootauth
configuration, and enable themicrosoft
provider for sign-in:app-config-rhdh.yaml
fragmentauth: environment: production providers: microsoft: production: clientId: ${AUTH_AZURE_CLIENT_ID} clientSecret: ${AUTH_AZURE_CLIENT_SECRET} tenantId: ${AUTH_AZURE_TENANT_ID} # domainHint: ${AUTH_AZURE_TENANT_ID} # (1) # additionalScopes: # (2) # - Mail.Send signInPage: microsoft # (3)
-
Optional for single-tenant applications. You can reduce login friction for users with accounts in multiple tenants by automatically filtering out accounts from other tenants. If you want to use this parameter for a single-tenant application, uncomment and enter the tenant ID. If your application registration is multi-tenant, leave this parameter blank. For more information, see Home Realm Discovery.
-
Optional for additional scopes. To add scopes for the application registration, uncomment and enter the list of scopes that you want to add. The default and mandatory value is
['user.read']
. -
To enable the Microsoft Azure provider as default sign-in provider.
-
Note
|
Optional for environments with restrictions on outgoing access, such as firewall rules. If your environment has outgoing access restrictions make sure your Backstage backend has access to the following hosts:
|
Chapter 3. Enabling the GitHub authentication provider
Red Hat Developer Hub uses a built-in GitHub authentication provider to authenticate users in GitHub or GitHub Enterprise.
3.1. GitHub App overview
GitHub Apps are generally preferred to OAuth apps because they use fine-grained permissions, give more control over which repositories the application can access, and use short-lived tokens. For more information, see GitHub Apps overview in the GitHub documentation.
3.2. Registering a GitHub App
In a GitHub App, you configure the allowed scopes as part of that application, therefore, you must verify the scope that your plugins require. The scope information is available in the plugin README files.
To add GitHub authentication, complete the steps in Registering a GitHub App on the GitHub website.
Use the following examples to enter the information about your production environment into the required fields on the Register new GitHub App page:
-
Application name: Red Hat Developer Hub
-
Homepage URL:
https://developer-hub-<NAMESPACE_NAME>.<KUBERNETES_ROUTE_HOST>
-
Authorization callback URL:
https://developer-hub-<NAMESPACE_NAME>.<KUBERNETES_ROUTE_HOST>/api/auth/github/handler/frame
Note
|
The Homepage URL points to the Developer Hub front end, while the authorization callback URL points to the authentication provider backend. |
3.3. Configuring a GitHub App in Developer Hub
To add GitHub authentication for Developer Hub, you must configure the GitHub App in your app-config.yaml
file.
The GitHub authentication provider uses the following configuration keys:
-
clientId
: the client ID that you generated on GitHub. For example: b59241722e3c3b4816e2 -
clientSecret
: the client secret tied to the generated client ID. -
enterpriseInstanceUrl
(optional): the base URL for a GitHub Enterprise instance. For example:https://ghe.<company>.com
. TheenterpriseInstanceUrl
is only needed for GitHub Enterprise. -
callbackUrl
(optional): the callback URL that GitHub uses when initiating an OAuth flow. For example: https://your-intermediate-service.com/handler. ThecallbackUrl
is only needed if Developer Hub is not the immediate receiver, such as in cases when you use one OAuth app for many Developer Hub instances.
To configure the GitHub App, add the provider configuration to your app-config.yaml
file under the root auth configuration. For example:
auth:
environment: production
providers:
github:
production:
clientId: ${GITHUB_APP_CLIENT_ID}
clientSecret: ${GITHUB_APP_CLIENT_SECRET}
## uncomment if using GitHub Enterprise
# enterpriseInstanceUrl: ${GITHUB_URL}
3.4. Adding the GitHub provider to the Developer Hub front end
To add the provider to the front end, add the sign in configuration to your app-config.yaml
file. For example:
signInPage: github
-
For information about authenticating Backstage access with GitHub, see GitHub Authentication Provider in the community documentation.
-
For information about adding the provider to the Backstage front end, see Enabling authentication in Showcase in the community documentation.
Chapter 4. Enabling the OpenID Connect authentication provider
Red Hat Developer Hub uses the OpenID Connect (OIDC) authentication provider to authenticate with third-party services that support the OIDC protocol.
4.1. Overview of using the OIDC authentication provider in Developer Hub
You can configure the OIDC authentication provider in Developer Hub by updating your app-config.yaml
file under the root auth configuration. For example:
auth:
environment: production
# Providing an auth.session.secret will enable session support in the auth-backend
session:
secret: ${SESSION_SECRET}
providers:
oidc:
production:
metadataUrl: ${AUTH_OIDC_METADATA_URL}
clientId: ${AUTH_OIDC_CLIENT_ID}
clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
prompt: ${AUTH_OIDC_PROMPT} # Recommended to use auto
## Uncomment for additional configuration options
# callbackUrl: ${AUTH_OIDC_CALLBACK_URL}
# tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}
# tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}
# scope: ${AUTH_OIDC_SCOPE}
## Declarative resolvers to override the default resolver: `emailLocalPartMatchingUserEntityName`
## The authentication provider tries each sign-in resolver until it succeeds, and fails if none succeed. Uncomment the resolvers that you want to use.
# signIn:
# resolvers:
# - resolver: preferredUsernameMatchingUserEntityName
# - resolver: emailMatchingUserEntityProfileEmail
# - resolver: emailLocalPartMatchingUserEntityName
signInPage: oidc
4.2. Configuring Keycloak with the OIDC authentication provider
Red Hat Developer Hub includes an OIDC authentication provider that can authenticate users by using Keycloak.
Important
|
The user that you create in Keycloak must also be available in the Developer Hub catalog. |
-
In Keycloak, create a new realm, for example
RHDH
. -
Add a new user.
- Username
-
Username for the user, for example:
rhdhuser
-
Email address of the user.
- First name
-
First name of the user.
- Last name
-
Last name of the user.
- Email verified
-
Toggle to On.
-
Click Create.
-
Navigate to the Credentials tab.
-
Click Set password.
-
Enter the Password for the user account and toggle Temporary to Off.
-
Create a new Client ID, for example,
RHDH
.- Client authentication
-
Toggle to On.
- Valid redirect URIs
-
Set to the OIDC handler URL, for example,
https://<RHDH_URL>/api/auth/oidc/handler/frame
.
-
Navigate to the Credentials tab and copy the Client secret.
-
Save the Client ID and the Client Secret for the next step.
-
In Developer Hub, add your Keycloak credentials in your Developer Hub secrets.
-
Edit your Developer Hub secrets, such as secrets-rhdh.
-
Add the following key/value pairs:
AUTH_KEYCLOAK_CLIENT_ID
-
Enter the Client ID that you generated in Keycloak, such as
RHDH
. AUTH_KEYCLOAK_CLIENT_SECRET
-
Enter the Client Secret that you generated in Keycloak.
-
-
Set up the OIDC authentication provider in your Developer Hub custom configuration.
-
Edit your custom Developer Hub ConfigMap, such as
app-config-rhdh
. -
In the
app-config-rhdh.yaml
content, add theoidc
provider configuration under the rootauth
configuration, and enable theoidc
provider for sign-in:app-config-rhdh.yaml
fragmentauth: environment: production providers: oidc: production: clientId: ${AUTH_KEYCLOAK_CLIENT_ID} clientSecret: ${AUTH_KEYCLOAK_CLIENT_SECRET} metadataUrl: ${KEYCLOAK_BASE_URL}/auth/realms/${KEYCLOAK_REALM} prompt: ${KEYCLOAK_PROMPT} # recommended to use auto Uncomment for additional configuration options #callbackUrl: ${KEYCLOAK_CALLBACK_URL} #tokenEndpointAuthMethod: ${KEYCLOAK_TOKEN_ENDPOINT_METHOD} #tokenSignedResponseAlg: ${KEYCLOAK_SIGNED_RESPONSE_ALG} #scope: ${KEYCLOAK_SCOPE} If you are using the keycloak-backend plugin, use the
preferredUsernameMatchingUserEntityName
resolver to avoid a login error. signIn: resolvers: - resolver: preferredUsernameMatchingUserEntityName signInPage: oidc
-
-
Restart your
backstage-developer-hub
application to apply the changes. -
Your Developer Hub sign-in page displays Sign in using OIDC.
4.3. Migrating from OAuth2 Proxy with Keycloak to OIDC in Developer Hub
If you are using OAuth2 Proxy as an authentication provider with Keycloak, and you want to migrate to OIDC, you can update your authentication provider configuration to use OIDC.
-
In Keycloak, update the valid redirect URI to
https://<rhdh_url>/api/auth/oidc/handler/frame
. Make sure to replace<rhdh_url>
with your Developer Hub application URL, such as,my.rhdh.example.com
. -
Replace the
oauth2Proxy
configuration values in theauth
section of yourapp-config.yaml
file with theoidc
configuration values. -
Update the
signInPage
configuration value fromoauth2Proxy
tooidc
.The following example shows the
auth.providers
andsignInPage
configuration foroauth2Proxy
prior to migrating the authentication provider tooidc
:auth: environment: production session: secret: ${SESSION_SECRET} providers: oauth2Proxy: {} signInPage: oauth2Proxy
The following example shows the
auth.providers
andsignInPage
configuration after migrating the authentication provider tooidc
:auth: environment: production session: secret: ${SESSION_SECRET} providers: oidc: production: metadataUrl: ${KEYCLOAK_METADATA_URL} clientId: ${KEYCLOAK_CLIENT_ID} clientSecret: ${KEYCLOAK_CLIENT_SECRET} prompt: ${KEYCLOAK_PROMPT} # recommended to use auto signInPage: oidc
-
Remove the OAuth2 Proxy sidecar container and update the
upstream.service
section of your Helm chart’svalues.yaml
file as follows:-
service.ports.backend
:7007
-
service.ports.targetPort
:backend
The following example shows the
service
configuration foroauth2Proxy
prior to migrating the authentication provider tooidc
:service: ports: name: http-backend backend: 4180 targetPort: oauth2Proxy
The following example shows the
service
configuration after migrating the authentication provider tooidc
:service: ports: name: http-backend backend: 7007 targetPort: backend
-
-
Upgrade the Developer Hub Helm chart.