Skip to main content

OAuth Providers

ProjectAchilles uses Clerk for authentication, supporting multiple OAuth providers out of the box.

Supported Providers

ProviderDevelopmentProduction
GoogleShared credentials (automatic)Custom OAuth app required
GitHubShared credentials (automatic)Custom OAuth app required
MicrosoftShared credentials (automatic)Custom OAuth app required

Development Mode

In Clerk development mode (pk_test_ keys), social login works immediately with Clerk's shared OAuth credentials. No configuration needed.

Production Mode

Custom Credentials Required

Clerk production instances (pk_live_ keys) require your own OAuth app credentials for each provider. Without them, social login buttons redirect with an empty client_id, resulting in a 404 error.

Google OAuth Setup

  1. Go to Google Cloud Console → APIs & Services → Credentials
  2. Create an OAuth 2.0 Client ID (Web application type)
  3. Add authorized redirect URI: https://clerk.<your-domain>/v1/oauth_callback
  4. Enter Client ID and Client Secret in Clerk Dashboard → SSO Connections → Google

GitHub OAuth Setup

  1. Go to GitHub Developer Settings → OAuth Apps → New OAuth App
  2. Set Authorization callback URL to https://clerk.<your-domain>/v1/oauth_callback
  3. Generate a Client Secret
  4. Enter Client ID and Client Secret in Clerk Dashboard → SSO Connections → GitHub

Microsoft OAuth Setup

  1. Go to Azure Portal → App Registrations → New Registration
  2. Add redirect URI: https://clerk.<your-domain>/v1/oauth_callback
  3. Create a client secret under Certificates & Secrets
  4. Enter Application (client) ID and secret in Clerk Dashboard → SSO Connections → Microsoft

Clerk Dashboard Configuration

After configuring OAuth providers:

  1. Go to Domains → add your frontend URL as an allowed origin
  2. Go to Redirect URLs → add https://<your-domain>/*
  3. Ensure the correct environment (Development vs Production) is selected

Troubleshooting

Social login returns 404

You're using production keys without custom OAuth credentials. See the production setup steps above.

"Clerk: auth() was called without middleware"

The backend middleware isn't configured. Ensure @clerk/express middleware is applied to the Express app.