Skip to Content
Admin & Team SettingsGoogle Workspace

Google Workspace Authorization Guide

This guide helps a Google Workspace administrator allow Town for an approved user population, and maps common Google authorization errors to the setting that is the likely cause.

Town uses per-user OAuth authorization. Town does not use Google Workspace domain-wide delegation. Two separate controls are involved:

ControlOwnerResult
App access policyGoogle Workspace administratorAllows, limits, or blocks the Town OAuth client for the selected users
User consentEach Town userGrants Town access to that user’s Google account, within the admin policy

An admin approval does not create a Town account or add a user to a Town team. A user approval does not override a Workspace policy.

Town’s OAuth client

App nameTown
Client ID703322804526-hv17tegpd6af9gfuj1hqvnoddjioj724.apps.googleusercontent.com

Use this exact client ID when configuring Town in Google Admin.

The client ID is public, not a secret. Never share or request the OAuth client secret — Town will never ask for it.

Choose an app access policy

Google Workspace provides four app access settings:

SettingWhat Google allowsNotes for Town
Specific Google dataTown can request only the scopes an admin selectsThe least-data option. Include the full base scope set, plus each approved optional bundle. Update the allowlist before users enable a new Town Google capability.
TrustedTown can request all Google Workspace services, including restricted servicesSimplest to maintain if your organization accepts app-level trust.
LimitedTown can request only unrestricted Google servicesFragile for Town, because gmail.modify is a high-risk Gmail scope.
BlockedTown cannot request Google dataNo Town authorization is possible for the selected users.

For a pilot, use one of two patterns:

  • Least-data pattern — set Town to Specific Google data for the pilot population and add the complete base set. If your organization approves Drive or Contacts, add only the applicable bundle.
  • App-trust pattern — set Town to Trusted for the pilot population, if your organization accepts the broader app policy.

Specific Google data is the narrowest option only when the scope list stays complete and current. A missing required scope can block sign-in or a Town feature.

Base permission set

Town requests the base set when a user connects their primary Google Workspace account. It supports identity, Gmail, Calendar, calendar availability, calendar discovery, and Workspace group expansion.

ServiceExact scopePurpose
OpenID ConnectopenidIdentifies the signed-in Google account
OpenID ConnectemailReturns the account email in the identity token
OpenID ConnectprofileReturns the basic profile in the identity token
Google Sign-inhttps://www.googleapis.com/auth/userinfo.emailReads the Google account email
Google Sign-inhttps://www.googleapis.com/auth/userinfo.profileReads the user’s name and profile image
Gmailhttps://www.googleapis.com/auth/gmail.modifyReads, drafts, sends, labels, and updates Gmail messages
Calendarhttps://www.googleapis.com/auth/calendar.eventsReads and manages calendar events
Calendarhttps://www.googleapis.com/auth/calendar.events.freebusyReads free/busy availability on calendars the user can access
Calendarhttps://www.googleapis.com/auth/calendar.calendarlist.readonlyLists calendars available to the user
Cloud Identityhttps://www.googleapis.com/auth/cloud-identity.groups.readonlyReads groups and members the Workspace user can access

Notes:

  • gmail.modify is classified as a high-risk Gmail scope in Google Admin. It is required for Town’s current Gmail capabilities, including actions that only read mail.
  • The Cloud Identity Groups scope lets Town expand a Workspace group for calendar workflows. It does not give Town domain-wide administrator access.
  • Do not omit the sign-in scopes — Town always requests them to identify the connecting account, even when your review concerns only Gmail or Calendar data.
  • Room-calendar directory access is a separate, admin-restricted capability. Do not add an Admin Directory room scope unless that feature is approved separately.

Optional capability bundles

Town uses progressive authorization for the primary account: a user can connect Gmail and Calendar without Drive or Contacts. With Specific Google data, allow an optional bundle before a user enables that feature.

Drive, Docs, Sheets, and Slides

Add all four scopes before a user enables the Drive integration. Google classifies the Drive and Docs scopes as high risk; they permit read and write actions in the connected user’s Google files.

ServiceExact scope
Drivehttps://www.googleapis.com/auth/drive
Docshttps://www.googleapis.com/auth/documents
Sheetshttps://www.googleapis.com/auth/spreadsheets
Slideshttps://www.googleapis.com/auth/presentations

Google Contacts

Contacts is a separate optional enhancement. Add all three scopes before a user enables it.

ServiceExact scope
Saved contacts, readhttps://www.googleapis.com/auth/contacts.readonly
Other contacts, readhttps://www.googleapis.com/auth/contacts.other.readonly
Saved contacts, writehttps://www.googleapis.com/auth/contacts

Secondary Google accounts

A new secondary Google connection requests the base set and the Drive bundle by default (Contacts remains a separate opt-in). If your organization uses Specific Google data, allow the Drive bundle before a user adds a secondary Google account.

Configure Town in Google Admin

Use an administrator account with the Security settings privilege.

Admin path: Security → Access and data control → API controls → Manage App Access

  1. Under Configured apps, select Configure new app.
  2. Enter Town’s production OAuth client ID (above).
  3. Select the result named Town and confirm the client ID matches exactly.
  4. If the policy applies to all users, keep the top organizational unit at Scope. Otherwise, select the organizational unit(s) that contain the pilot users.
  5. Select Specific Google data or Trusted according to your approved decision.
  6. For Specific Google data, add every scope in the base set, plus only the approved optional bundles.
  7. Review the client ID, organizational units, access setting, and scopes, then select Finish.

Notes on scope of the policy:

  • The initial Configure new app wizard offers organizational units, not configuration groups. After the app exists, open its app information page and expand Access to Google data — in supported Google Admin editions an admin can then target a group. Verify this option is available in your Workspace edition before designing a group-based policy.
  • If a child organizational unit already has an app policy, a later change at the top organizational unit does not replace that child policy.
  • A Town team is not a Google Workspace policy boundary. Google applies the OAuth policy to the selected Workspace users, not to Town team membership.
  • Configure Town explicitly by client ID; do not depend on your fallback policy for unconfigured apps.
  • Changes can take up to 24 hours to propagate (usually sooner).

Verify the configured list

The access-level setup screen can show scopes the app requested in the past, which can be broader than the current policy. Open View details for Town to verify the scopes Google currently applies.

If Town adds a scope in the future, Town tells customers before users can enable the related capability — with Specific Google data, update the allowlist before the new request can succeed.

Context-Aware Access

If your organization applies Context-Aware Access levels to Workspace API access, a level assigned to a Google service can block Town’s API calls even after the app access policy allows Town.

If an exemption is required, follow Google’s exemption workflow :

  1. Configure Town by OAuth client ID and set it to Trusted for the approved organizational units.
  2. Select Exempt from having API access blocked by Context-Aware Access levels in the Town app access policy.
  3. Verify the exemption applies to the pilot users, then test from a device and network that represent the pilot policy.

If your organization does not use Context-Aware Access for Workspace API access, do not add an exemption.

Error-to-action matrix

The same screen can have more than one cause. Treat these mappings as likely causes, not proof — verify the effective user policy and the exact OAuth request.

Error or symptomLikely causeOwnerFirst action
access_not_configured or an admin-review blockTown is unconfigured, Limited conflicts with a restricted service, or Specific Google data lacks a scopeWorkspace adminVerify the client ID, effective user scope, access setting, and exact scope list
admin_policy_enforced or “app is blocked”Town is Blocked for the user’s effective policy, or another Workspace control denies accessWorkspace adminOpen View details for the affected user’s organizational unit or group
Town says Refresh permissions, or Google returns insufficientPermissionsThe user declined a permission, the grant was revoked, the token is stale, or the admin allowlist lacks a scopeUser and Workspace adminCompare the consent grant with the admin scope list, then reconnect
”Google hasn’t verified this app”Town’s consent screen or Google verification state needs reviewTownContact Town support with the exact error and OAuth client ID
disallowed_useragentSign-in is running in an unsupported embedded browserUser or TownRetry in a supported system browser; report the client if it continues
Gmail API FAILED_PRECONDITION (“Precondition check failed”) on users/me/profile, or Town reports no Gmail mailboxGmail is not provisioned for that Workspace accountWorkspace adminVerify Gmail is enabled and licensed for the user
accessNotConfigured in an API responseA required Google API is disabled in Town’s Google Cloud projectTownContact Town support with the API name, error, time, and client ID

Also verify whether the user selected every required permission on Google’s consent screen — an incomplete user grant can look similar to an admin-policy failure after sign-in.

Workspace-side recovery

For access_not_configured, admin_policy_enforced, or a scope failure:

  1. Record the affected user’s primary email address and identify their organizational unit (and any configuration group that changes Town’s app access policy).
  2. In Manage App Access, find Town by the production OAuth client ID and open View details to verify the effective access setting for that user population.
  3. If the setting is Blocked, apply the approved Specific Google data or Trusted policy.
  4. If the setting is Specific Google data, compare every requested scope with the base and optional tables above.
  5. If the setting is Limited, review each requested Google service — a restricted service can block the request.
  6. If Context-Aware Access applies, verify Town is Trusted with the Context-Aware Access exemption selected.
  7. Verify Gmail is provisioned for the user.
  8. Ask the user to start a new Town connection in a supported browser, selecting every required permission.

Do not use repeated reconnect attempts as a substitute for checking the policy — a blocked or incomplete policy will produce the same failure again.

When to contact Town

The customer controls Workspace policy; Town controls the production OAuth project, consent-screen configuration, enabled Google APIs, and the scope request the product sends. Contact Town support when:

  • The app name, publisher, or verification information looks incorrect, or Google reports the app is not verified.
  • A Google API returns accessNotConfigured for Town’s Cloud project.
  • The consent screen requests a scope that is not in the tables above.
  • The client ID Google displays does not match the one printed in this guide.
  • The error continues after the effective Workspace policy and user grant are verified.

Helpful evidence: the exact error code and text, date/time and time zone, the affected user (or an approved identifier), the client ID Google displayed, the Google service that failed, the browser used, a screenshot with tokens and unrelated personal data removed, the effective app access setting and target organizational unit or group, and whether Context-Aware Access applies.

Never send authorization codes, access tokens, refresh tokens, session cookies, or passwords in a support request. Customers should not create or edit a Google Cloud project for Town.

Verification checklist

Before the pilot starts:

  • The configured app is named Town and matches the production OAuth client ID above (reviewed by client ID, not app name alone).
  • View details shows Specific Google data or Trusted for the pilot users.
  • If Specific Google data is used, every base scope is present — plus the Drive bundle (four scopes) and/or Contacts bundle (three scopes) if approved, and the Drive bundle if secondary Google accounts will be added.
  • If Context-Aware Access applies, Town is Trusted and its app access policy contains the Context-Aware Access exemption.

Then run a controlled user test: one pilot user connects in a supported browser, selects every required permission, and confirms Town shows the account as connected, can list calendars, read free/busy availability, and complete a Gmail draft test. Test each approved optional feature only after its scope bundle is allowed.

Google references

Google Admin labels and available controls vary by Workspace edition and can change over time. Verify the labels in the current Admin console before a production rollout.

Last updated on