WebUI authentication with Google OAuth 2.0 or OIDC
When used with the Web UI running in a GKE cluster, the users authorization roles will be automatically synchronized based upon their IAM roles in GCP.
If you are not exposing the webui on a load balancer IP address, but are instead using kubectl port-forward
, you
should use http
, localhost
and 7007
for the SCHEME
, HOSTNAME
and PORT
; otherwise, use the scheme, DNS name
and port as it will be seen by your browser. You can leave the port off if it is 443 for HTTPS or 80 for HTTP.
Creating an OAuth 2.0 Client ID
Google OAuth 2.0 requires a client ID and allows you to authenticate against the GCP identity service. To create your client ID and secret:
-
Sign in to the Google Console
-
Select or create a new project from the dropdown menu on the top bar
-
Navigate to APIs & Services > Credentials
-
Click Create Credentials and choose
OAuth client ID
-
Configure an OAuth consent screen, if required
- For scopes, select
openid
,auth/userinfo.email
,auth/userinfo.profile
, andauth/cloud-platform
. - Add any users that will want access to the UI if using External user type
- For scopes, select
-
Set Application Type to
Web Application
with these settings:- Name: Nephio Web UI (or any other name you wish)
- Authorized JavaScript origins:
SCHEME
://HOSTNAME
:PORT
- Authorized redirect URIs:
SCHEME
://HOSTNAME
:PORT
/api/auth/google/handler/frame
-
Click Create
-
Copy the client ID and client secret displayed
Create the Secret in the Cluster
The client ID and client secret need to be added as a Kubernetes secret to your cluster. This can be done via Secrets Manager or Vault integrations, or you can manually provision the secret (replacing the placeholders here):
kubectl create ns nephio-webui
kubectl create secret generic -n nephio-webui nephio-google-oauth-client --from-literal=client-id=CLIENT_ID_PLACEHOLDER --from-literal=client-secret=CLIENT_SECRET_PLACEHOLDER
Enable Google OAuth
The webui package has a function that will configure the package for authentication with different services. Edit the
set-auth.yaml
file to set the authProvider
field to google
or run this command:
kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=authProvider' 'put-value=google'
Enable OIDC with Google
The webui package has a function that will configure the package for authentication with different services. Edit the
set-auth.yaml
file to set the authProvider
field to oidc
and the oidcTokenProvider
to google
, or run these
commands:
kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=authProvider' 'put-value=oidc'
kpt fn eval nephio-webui --image gcr.io/kpt-fn/search-replace:v0.2.0 --match-name set-auth -- 'by-path=oidcTokenProvider' 'put-value=google'