OAuth Grant Types

When your app needs tokens from Descope, and you want to use Descope as a Federated Identity Provider (IdP) with OAuth 2.0/2.1, it does that through one of the standard OAuth 2.0 / OpenID Connect grant types.

The protocol is the same whether you are using an OIDC Federated App or an Inbound App.

With a Federated OIDC App, Descope is the identity provider your users sign into for your product. There is no third-party consent screen for Resource scopes, and you are not modeling API permissions as Resources on that path. With an Inbound App, Descope is the authorization server for clients that call your APIs or MCP servers: users or tenants consent to scopes on a Resource, those scopes (and mapped roles) show up in the token, and your API enforces them.

OIDC Federated AppsInbound Apps
RoleDescope is the IdP your users sign into for your productDescope is the authorization server for clients that access your APIs / MCP servers
ConsentNo third-party consent screen for Resource scopesUsers (or tenants) consent to scopes on a Resource
Resources / scopesNot used for API Resource permissionsScopes and role mapping live on Resources; your API enforces the token
Typical client_idProject ID (OIDC app)Inbound App client ID

Note

These OAuth grant types apply to OIDC Federated Apps and to Inbound Apps. SAML, WS-Federation, and Custom Federated Apps do not use these grants.

Both OIDC paths talk to familiar authorize and token endpoints. Federated OIDC lives under /oauth2/v1/...; Inbound Apps use /oauth2/v1/apps/.... For the full route lists, see OIDC Endpoints and the Inbound Authorization Server.

Diagrams

The interactive diagram below walks through each grant. Use the step controls to switch flows; the caption under each one calls out where Federated and Inbound Apps diverge.

ClientBrowser / UserDescoperedirect to /authorizeGET /authorizeauth (+ consent)redirect with codecallback with codePOST /token (code)issues tokensaccess (+ id / refresh)

Interactive login where the user authenticates in a browser, then the client exchanges a short-lived code for tokens.

1 / 6

When to use each grant

Not every grant fits every client. Use this table as a quick guide, then jump into the diagram above (or the runtime docs in Next steps) for the details.

GrantUser present?Best forFederated OIDCInbound Apps
Authorization code (+ optional PKCE)YesWeb/mobile apps, interactive loginYesYes (with consent)
Client credentialsNoM2M / service accountsYesYes (policies + Resources)
JWT bearerUsually no user login in DescopeExchange an external IdP or workload JWT—Yes
CIBAYes (on another device)Headless / decoupled approval—Yes
Device authorizationYes (on another device)TVs, CLIs, input-constrained devicesYesSee Using Inbound Apps

There is one more grant worth knowing about after you already have a Descope token: token exchange (urn:ietf:params:oauth:grant-type:token-exchange). It lets you trade that token for one scoped to a specific Resource (or for an ID-JAG). You do not flip it on under Grant Types in the Console — what is allowed is controlled by Policies. See Token exchange for policy setup and the request shape.

Next steps

Once you know which grant you need, these pages cover configuration and runtime examples:

Was this helpful?

On this page