Skip to main content
Some identity providers don’t support Dynamic Client Registration (DCR). FrontMCP’s OAuth proxy bridges this gap by acting as a local OAuth server while delegating user authentication to the upstream IdP.
mode: 'remote' proxies to one mandatory upstream IdP. GET /oauth/authorize redirects straight to that IdP (no FrontMCP login page, no provider-selection page). FrontMCP exchanges the returned code, stores the upstream tokens (encrypted), derives the session identity from the upstream user, mints its own HS256 session token, and exposes the upstream token to tools via this.orchestration.getToken('<provider-id>'). A pre-registered clientId is required today (DCR is not yet wired — see below).

When to Use OAuth Proxy

Use Proxy When

  • IdP doesn’t support DCR
  • Need custom token claims
  • Want unified auth endpoints
  • Require consent UI layer

Use Direct When

  • IdP supports DCR (Auth0, Okta)
  • Simple pass-through needed
  • No custom claims required
  • Direct transparent mode works

How It Works

The proxy maintains:
  • Client registration with pre-provisioned credentials
  • JWKS for signing FrontMCP tokens
  • Session state linking upstream tokens to local sessions
  • Token vault storing upstream tokens for API calls

Configuration

Basic Setup

Configuration Options


Endpoint Overrides

For non-standard IdPs, override auto-discovered endpoints:

Inline JWKS

For IdPs without a JWKS endpoint:

Token Management

Upstream Token Storage

The proxy stores upstream IdP tokens in the token vault:

Automatic Refresh

Not yet wired. On-demand refresh of the upstream token is not currently performed. The encrypted token store evicts a provider record (including its refresh token) as soon as the upstream access token expires, so once the upstream token lapses this.orchestration.getToken() returns null/throws and the user must re-authenticate (revisit /oauth/authorize). The refresh option below is accepted by the schema but does not yet drive upstream refresh. (FrontMCP’s own session token still refreshes normally via the standard refresh_token grant at /oauth/token.)

Reading the Upstream Token

The upstream IdP token is stored server-side (encrypted) and read by tools via the orchestration accessor — it is never exposed to the LLM:

Custom Claims

Custom claims are sourced from the upstream identity provider. Configure your IdP to include the claims you need on the upstream JWT (department, employee_id, roles, etc.); FrontMCP forwards them through this.context.authInfo (or, for typed access, this.auth.claims).

Multi-Provider Proxy

Proxy multiple IdPs under one FrontMCP instance:
Each app’s upstream token is stored server-side (encrypted). With progressive authorization enabled (auth.incrementalAuth), users authorize apps one at a time: the minted token’s authorized_apps claim gates which apps a call may reach, and an incremental authorize expands that claim (a fresh token with the union of granted apps) without re-authorizing the apps already granted.

Proxy vs Direct Comparison


Security Considerations

Store client secrets securely. Never commit secrets to version control. Use environment variables or a secrets manager.
Validate redirect URIs - Ensure callback URLs are registered with the upstream IdP
Use HTTPS - All communication with upstream IdP must be encrypted
Rotate secrets - Periodically rotate client secrets
Monitor token usage - Log and alert on unusual token patterns

Troubleshooting

  • Ensure session storage is configured (Redis for multi-instance)
  • Check that pending authorization TTL hasn’t expired
  • Verify the state parameter is being preserved
  • Verify client credentials are correct
  • Check that redirect URI matches exactly (including trailing slash)
  • Ensure scopes requested are allowed by IdP configuration
  • Confirm openid and profile scopes are requested
  • Check userinfo endpoint is accessible
  • Verify IdP returns expected claims
  • Some IdPs require offline_access scope for refresh tokens
  • Check if IdP rotates refresh tokens (handle rotation)
  • Verify refresh token hasn’t been revoked

Next Steps

Remote OAuth

Direct IdP integration without proxy

Progressive Authorization

Incremental app authorization

Production Checklist

Security requirements for deployment

Tokens & Sessions

Token lifecycle management