Google Cloud OAuth Consent Screen + OAuth Client ID (2026 New UI)
[!NOTE]
TL;DR: 2025β2026 Google Cloud Console was reorganized into the Google Auth Platform (Branding / Audience / Data Access / Clients), and the path to set up an OAuth consent screen changed completely. This guide walks from a fresh project to a Web Client ID/Secret in 7 steps, ~10 minutes. The two things that actually matter: picking [External] in the wizard and getting the redirect URI exactly right.
Why this guide exists
- Most existing English guides still describe the old UI and send readers chasing menus that no longer exist.
- The new UI starts with a "Get started" wizard β a single page with 4 stepper sections, not the old multi-screen flow.
- Pick External vs. Internal wrong and a regular web app will not work. The wizard does not let you change it later β you'd need a fresh project.
Prerequisites
- A Google account
- Access to a GCP project (or create one in step 01)
- Billing not required β OAuth consent screen + Client ID setup are free
Step 01 β Create a new GCP project
Start here: console.cloud.google.com/projectcreate
From the top-left project selector β "New project", or open the URL directly. Pick a recognizable name. The project ID is globally unique, so a numeric suffix may be appended automatically. Linking a billing account is NOT required for OAuth consent screen setup β skip the prompt if it appears.
Don't forget to switch to the new project from the selector after creating it. Otherwise the next steps will configure OAuth on a different project.
Step 02 β Open the OAuth consent screen β [Get started]
Start here: console.cloud.google.com/auth/branding?project=YOUR_PROJECT_ID
A fresh project shows the "Google Auth Platform not configured yet" notice. Click [Get started] at the bottom right to enter the 4-step wizard.
Three ways to land here (any of them works):
- Left hamburger menu β APIs & Services β OAuth consent screen
- Top search bar β type
OAuthβ click the result - Open the URL above directly
Step 03 β Pick [External] in the wizard (most common mistake)
Start here: console.cloud.google.com/auth/overview/create?project=YOUR_PROJECT_ID
The wizard is a single page with 4 stepper sections (1 β 2 β 3 β 4):
- App Information β App name (shown on the consent screen), User support email (dropdown of your Google accounts)
- Audience (User Type) β β the only real decision
- Contact Information β Email Google uses for policy/notification updates
- Finish β Accept the policy β [Create]
External vs. Internal β pick once, can't change later (without a fresh project):
| Option | Who can sign in? | When to pick? |
|---|---|---|
| Internal | Only accounts in the same Google Workspace organization | Internal tools (org account required) |
| External | Anyone with a Google Account | Public web apps (starts in test mode) |
For a typical web app, always pick [External]. External starts in "test mode" β only test users you add in step 04 can sign in until you publish the app.
Step 04 β [Audience] tab β add test users
Start here: console.cloud.google.com/auth/audience?project=YOUR_PROJECT_ID
An External-type OAuth app starts in "Testing" mode. Only Google accounts on the [Test users] list can sign in β everyone else hits an access_blocked error (the actual face of "Error 403: access_denied" you've probably seen elsewhere).
Click [Add users] and register your own + teammate/QA emails (up to 100). Effective immediately.
After publishing to production anyone can sign in, but:
- Non-sensitive scopes (openid/email/profile) β publish freely
- Sensitive scopes (Drive/Gmail/Calendar etc.) β Google verification process (weeks, security review)
Step 05 β [Data access] tab β add OAuth scopes
Start here: console.cloud.google.com/auth/scopes?project=YOUR_PROJECT_ID
Define the scopes (permissions) shown to users on the consent screen.
For typical Google Sign-In, three are enough (all non-sensitive):
openid.../auth/userinfo.email.../auth/userinfo.profile
Click [Add or remove scopes] β check the three in the right panel β [Update].
| Scope category | What it accesses | Google verification |
|---|---|---|
| Non-sensitive | Basic identity (email, profile) | Not required |
| Sensitive | Some Drive/Gmail/Calendar | Required |
| Restricted | Full Gmail/Drive | Required + security assessment |
Step 06 β Web client + Authorized redirect URIs
Start here: console.cloud.google.com/auth/clients/create?project=YOUR_PROJECT_ID
[Clients] tab β [Create Client] to get here.
Form fields:
- Application type: Web application for any browser-initiated OAuth flow (including BE servers exchanging tokens)
-
Name: just a label (e.g.,
myapp-web-prod,myapp-web-dev) - Authorized JavaScript origins: only needed for SPAs (browser-only token retrieval). Leave blank if your BE handles it
- Authorized redirect URIs: the exact callback URL β
A single character mismatch in the redirect URI yields redirect_uri_mismatch. Common slip-ups:
-
http://vs.https:// - Trailing slash (
/callbackvs./callback/) - Port (
:3000present or not) - Missing dev/staging/prod URIs
http://localhost:3000/... works for local dev. Multiple URIs allowed on the same client.
Then [Create].
Step 07 β Save Client ID + Secret (Secret won't be shown again)
Right after [Create], the OAuth client created dialog appears.
| Credential | Public OK? |
|---|---|
Client ID (123-abc.apps.googleusercontent.com) |
β Public OK (the identifier visible in browsers) |
Client Secret (GOCSPX-...) |
β Never expose |
Once the dialog closes, the Secret is never shown again. You'd need to issue a new secret or recreate the client.
Click [Download JSON] and:
- Move it to
.envor a password manager (1Password, Bitwarden, etc.) immediately -
Never commit to Git β add
*.env,client_secret*.jsonto.gitignore - Delete the downloaded JSON file from disk after saving
If exposed, rotate immediately: [Clients] tab β the client β "Add/Revoke secret" to issue a new one and expire the old.
Common mistakes
- Picked Internal β web app only accepts org accounts. You'd need a fresh project (External isn't reachable later).
-
Forgot to register test users β you can sign in but teammates/QA hit
access_blocked. -
Redirect URI off by a character β
redirect_uri_mismatch. Register every environment URI. -
Hardcoded Client Secret in source instead of .env β exposed on Git push. Use a pre-commit hook (
gitleaks,detect-secrets) to block it. - Adding sensitive scopes and trying to publish without verification β Google verification required. Ship the first version with non-sensitive scopes (openid/email/profile) only.
- Navigating away mid-wizard β wizard ends in an incomplete state. Start over from step 02.
- Picked iOS/Android/Desktop instead of Web Application β wrong OAuth flow, won't fit your BE server code.
References
- Google Identity β Official docs
- Web server OAuth flow
- OAuth verification (sensitive scopes)
- Google Cloud Console (Auth Platform)
Written against the 2026-04-18 Google Cloud Console UI. The UI may shift again β substitute your own project ID into the URLs above when following along.



















