Every OAuth provider: setup reference
Setup reference for all 19 OAuth providers on SupaHost: the provider key for signInWithOAuth, where to create the app, what to paste into the Auth tab, and the extra URL fields.
SupaHost supports 19 OAuth providers. Every one follows the same three steps, so this page only lists what differs. For the full walkthrough of the shared steps, read Social login (OAuth) first. Google, GitHub and Apple have their own pages: Google, GitHub, Apple.
The shared steps
- Copy the callback URL from Dashboard → your project → Auth tab → OAuth providers. It's the same for every provider:
https://<project host or active custom domain>/auth/v1/callback, for examplehttps://app-one.acme.supahost.space/auth/v1/callback. - Create an app at the provider and paste that URL wherever it asks for a redirect, callback or return URL.
- Enable the provider in SupaHost: click its row in the OAuth providers card, switch on Enabled, paste the ID and secret, fill the URL field if there is one, and click the save button. Secrets are stored encrypted and never shown again; leave the secret field empty to keep the stored one. Changes apply within about a minute.
Then call signInWithOAuth with the provider's key from the table below, and add your app's landing pages to Redirect URLs on the Auth card.
Provider table
| Provider | Key | Where to create the app | What to create | Fields in SupaHost |
|---|---|---|---|---|
google |
Google Cloud console | OAuth client ID, type "Web application" | Client ID, Client secret | |
| GitHub | github |
GitHub developer settings | OAuth App | Client ID, Client secret |
| Apple | apple |
Apple Developer: Services IDs | App ID, Services ID and a Sign in with Apple key | Services ID, Secret key (JWT generated from your .p8 key) |
| Microsoft (Azure) | azure |
Azure portal: App registrations | App registration with a Web redirect URI, plus a client secret | Application (client) ID, Client secret, Tenant URL (optional) |
| GitLab | gitlab |
GitLab applications | Application, confidential, scope read_user |
Client ID, Client secret, GitLab URL (self-hosted only, optional) |
| Bitbucket | bitbucket |
Bitbucket settings | OAuth consumer with Account: Email and Read permissions | Key, Client secret |
| Discord | discord |
Discord developer portal | Application, with the callback under OAuth2 → Redirects | Client ID, Client secret |
facebook |
Meta for Developers | App with Facebook Login; callback in "Valid OAuth Redirect URIs" | App ID, App secret | |
| Figma | figma |
Figma developer apps | App with a redirect URL and the user-read scope | Client ID, Client secret |
| Kakao | kakao |
Kakao developers console | App with Kakao Login on, the callback as Redirect URI, and a client secret | REST API key, Client secret |
| Keycloak | keycloak |
Your Keycloak admin console (docs) | OpenID Connect client with client authentication on | Client ID, Client secret, Realm URL (required) |
linkedin_oidc |
LinkedIn developer apps | App with the "Sign In with LinkedIn using OpenID Connect" product | Client ID, Client secret | |
| Notion | notion |
Notion integrations | Public integration (OAuth) with the callback as a redirect URI | OAuth client ID, Client secret |
| Slack | slack_oidc |
Slack apps | App with "Sign in with Slack" (OpenID Connect) and the callback under Redirect URLs | Client ID, Client secret |
| Spotify | spotify |
Spotify developer dashboard | App with the callback as a Redirect URI | Client ID, Client secret |
| Twitch | twitch |
Twitch developer console | Application, client type Confidential | Client ID, Client secret |
| X (Twitter) | twitter |
X developer portal | App with OAuth 1.0a user authentication and "Request email from users" | API key, API secret key |
| WorkOS | workos |
WorkOS dashboard | Redirect URI under Redirects; client ID and API key | Client ID, Client secret, WorkOS URL (optional) |
| Zoom | zoom |
Zoom App Marketplace | General (OAuth) app with the callback as redirect URL and allow-listed | Client ID, Client secret |
URL fields must start with https://.
Notes per provider
Microsoft (Azure)
- In Certificates & secrets, create a client secret and copy its Value, not its Secret ID.
- Tenant URL limits sign-in to one directory, for example
https://login.microsoftonline.com/0f1e2d3c-4b5a-6978-8f9e-a0b1c2d3e4f5. Leave it empty to accept any Microsoft account the app registration allows. - Ask for the
emailscope so Auth receives an address:
await supabase.auth.signInWithOAuth({ provider: 'azure', options: { scopes: 'email', redirectTo } })
GitLab
Use GitLab URL (self-hosted only) only for a self-managed GitLab, such as https://gitlab.example.com. Leave it empty for gitlab.com.
Keycloak
Realm URL is required and points at the realm, not the admin console: https://keycloak.example.com/realms/staff. In the client, set Valid redirect URIs to the SupaHost callback URL and copy the secret from the Credentials tab. Request the openid scope:
await supabase.auth.signInWithOAuth({ provider: 'keycloak', options: { scopes: 'openid', redirectTo } })
LinkedIn and Slack
Both use their OpenID Connect versions, so the keys are linkedin_oidc and slack_oidc. LinkedIn asks you to associate the app with a LinkedIn company page before it can be created.
X (Twitter)
The twitter provider uses OAuth 1.0a, so the credentials are the app's API key and API secret key from "Keys and tokens" (the consumer keys), not the OAuth 2.0 client ID. Turn on "Request email from users" in the app's user authentication settings, or users arrive without an email address.
WorkOS
WorkOS fronts enterprise SSO connections (SAML, Okta, Entra ID and others). The client secret is your WorkOS API key. WorkOS URL is optional and defaults to WorkOS's public API. Tell WorkOS which connection or organization to use when you start sign-in:
await supabase.auth.signInWithOAuth({
provider: 'workos',
options: { redirectTo, queryParams: { organization: 'org_01HZX3EXAMPLE' } },
})
Kakao
The client ID field is labelled REST API key: copy it from the app's keys page. Enable the client secret in the app's security settings and paste it as the secret.
Facebook, Discord, Spotify, Twitch, Figma, Notion, Zoom, Bitbucket
These need nothing beyond the shared steps. Ask for any extra permissions in the provider's console, or with scopes when you call signInWithOAuth.
Checklist when a provider doesn't work
- The provider row shows Enabled, and both the ID and a secret were saved. A provider isn't switched on without both.
- The callback URL at the provider matches the one in the card exactly. If you added a custom domain, the callback host changed.
- Your
redirectTois in Redirect URLs. - You waited a minute after saving.
See Redirected to the wrong URL and OAuth broke after adding a custom domain for the usual causes.