Application Settings
This guide explains how to configure an application from the ThunderID Console application details page.
Find Your Client ID
The Application ID and Client ID are shown on the application's General tab under Quick Copy. Use the copy button to grab them quickly.
- Application ID - the internal ThunderID identifier for this application.
- Client ID - the OAuth 2.0 identifier your SDK or client configuration needs.
Control Who Can Sign In
Under Access on the General tab, you can configure which users can register with this application and provide the application's URL and redirect URIs.
| Setting | Description |
|---|---|
| Allowed User Types | Restricts self-service registration to users of the selected types. If none are selected, self-service registration is unavailable for this application. This setting does not block existing users from signing in. |
| Application URL | The homepage URL of your application. |
| Authorized Redirect URIs | The URLs ThunderID sends users back to after authentication. Register every URI your application uses. |
Use Wildcard Redirect URIs
ThunderID supports wildcard patterns in redirect URIs, so you can register a single pattern that covers a range of valid callback URLs instead of listing every exact URI.
Wildcard redirect URI support is disabled by default. A ThunderID administrator must set oauth.allow_wildcard_redirect_uri: true in deployment.yaml to enable it. See Configuration for details.
You can use * to match a single path segment or part of a hostname label, and ** to match zero or more path segments. For example:
https://example.com/cb/*: matcheshttps://example.com/cb/v1but nothttps://example.com/cb/v1/extrahttps://app-*.example.com/cb: matcheshttps://app-prod.example.com/cbandhttps://app-staging.example.com/cb
When the authorization request included a redirect_uri, the token endpoint validates it with exact matching per RFC 6749 §4.1.3: wildcard expansion does not apply at the token endpoint.
Configure Sign-In, Registration, and Recovery Flows
On the Flows tab, choose the flows that drive sign-in, sign-up, and password recovery for this application.
Authentication Flow - select the flow users follow to sign in. You can assign a custom flow built with the Flow Designer or use the deployment default. Use the open the flow builder link to edit the selected flow directly.
Registration Flow - toggle the switch to enable or disable self-registration. When enabled, select a flow that defines what information users must provide to create an account.
Recovery Flow - toggle the switch to enable or disable password recovery. When enabled, select a flow that guides users through the password reset process.
Customize the Appearance
On the Customization tab, control how your application looks and what legal links users see.
| Setting | Description |
|---|---|
| Theme | The visual theme applied to authentication pages. Select Default Theme to use the shared deployment theme, or pick an application-specific theme. |
| Terms of Service URI | Displayed to users during consent, sign-in, sign-up, or recovery flows. |
| Privacy Policy URI | Displayed to users during consent, sign-in, sign-up, or recovery flows. |
| Contacts | Administrator email addresses for this application. Separate multiple addresses with commas. |
Configure What Goes Into Tokens
This section applies to OAuth 2.0 / OIDC applications (Browser App, Full-stack App, Mobile App, and Backend Service). For applications that use the embedded sign-in approach, user attributes are configured in the assertion returned by the flow, not in tokens.
On the Token tab, choose which user attributes each token carries, how long tokens stay valid, and the response format for ID tokens and userinfo.
Access Token: select the user attributes to include in the access token payload. Default attributes (sub, iss, exp, and others) are always included and cannot be removed. Set Token Validity in seconds (for example, 3600 for one hour).
ID Token: select the user attributes to include. Only attributes covered by the requested scopes are returned. Set Token Validity in seconds.
You can also configure the ID token response format via the API. These settings are not available in the Console.
| Setting | Description |
|---|---|
| Response Type | JWT (signed only, default), JWE (encrypted), or NESTED_JWT (signed then encrypted). |
| Encryption Algorithm | Key-management algorithm. Required for JWE and NESTED_JWT. Options: RSA-OAEP, RSA-OAEP-256. Requires an OAuth client certificate. |
| Encryption Encoding | Content-encryption algorithm. Required when Encryption Algorithm is set. Options: A128CBC-HS256, A256GCM. |
User Info: configure what the /userinfo endpoint returns. User attributes are configurable from the Console. Response format settings are available via the API only.
| Setting | Description |
|---|---|
| User Attributes | Attributes returned by the /userinfo endpoint. Enable Use same attributes as ID Token to mirror your ID token selection, or define a separate set. |
| Response Type | JSON (default), JWS (signed), JWE (encrypted), or NESTED_JWT (signed then encrypted). |
| Signing Algorithm | Required for JWS and NESTED_JWT. Options: RS256, RS512, PS256, ES256, ES384, ES512, EdDSA. Requires an OAuth client certificate. |
| Encryption Algorithm | Required for JWE and NESTED_JWT. Options: RSA-OAEP, RSA-OAEP-256. Requires an OAuth client certificate. |
| Encryption Encoding | Required when Encryption Algorithm is set. Options: A128CBC-HS256, A256GCM. |
Rotate the Client Secret
Client secrets are only present on confidential clients, Full-stack App and Backend Service application types. This section does not apply to public clients such as Browser App or Mobile App.
If you need to invalidate the current client secret, open the General tab and click Regenerate Client Secret in the Danger Zone.
The current client secret is immediately invalidated. Any running clients using the old secret will lose access. Update your application configuration right away.
Review OAuth 2.0 Configuration
This section applies to OAuth 2.0 / OIDC applications only.
The Advanced Settings tab shows the OAuth 2.0 settings configured at creation.
| Setting | Description |
|---|---|
| Grant Types | The OAuth 2.0 flows this application can use. Supported values: authorization_code, refresh_token, client_credentials, urn:ietf:params:oauth:grant-type:token-exchange. Applications configured with authorization_code cannot initiate new flows directly via POST /flow/execute. They must begin authentication through the Authorization endpoint (GET /oauth2/authorize), which initiates the flow internally. |
| Response Types | The response types the application can request (for example, code). |
| Token Endpoint Auth Method | How the application authenticates at the token endpoint: client_secret_basic (default), client_secret_post, private_key_jwt, or none (public clients). |
| Public Client | Whether this is a public client that cannot securely store a client secret. |
| PKCE Required | Whether the application must send a code_challenge in every authorization request. Always Yes for public clients. |
You can also attach a Certificate for client authentication (private_key_jwt) or token/userinfo encryption.
| Certificate Type | Description |
|---|---|
None | No certificate configured. |
JWKS | Provide the JSON Web Key Set (JWKS) inline. |
JWKS_URI | Provide the URL of the application's JWKS endpoint. ThunderID fetches the public keys to verify signed requests. Must use HTTPS. |
For full protocol-level details, including ACR values, scope-to-claims mapping, PAR enforcement, and token signing and encryption algorithms, see the OAuth & OIDC catalogue.
Configure Platform Attestation
Mobile applications cannot safely hold a Flow Secret, so they prove their identity a different way: by presenting a platform attestation token. ThunderID supports Google Play Integrity for Android clients and Apple App Attest for iOS clients. See Attestation for how this fits into the App-Native integration model. Attestation is optional; when enabled, an application configures exactly one platform, from its Advanced tab or via the top-level attestation block in a declarative resource.
Android (Google Play Integrity)
Configure the Android platform under the attestation.android block:
| Setting | Description |
|---|---|
| Package Name | The Android application package name (for example, com.example.myapp) that must match the attested app. |
| Signing Certificate SHA-256 Digests | One or more allowed signing certificate digests, in the URL-safe base64 form reported by Play Integrity. The attested app must match one of these. |
| Service Account Credentials | The Google Cloud service account JSON used to call the Play Integrity API. It is write-only: ThunderID never returns it in responses, and leaving it blank when editing keeps the stored value. |
The service account credentials are stored encrypted and never returned. For an app managed declaratively, set the serviceAccountCredentials field in the attestation.android block. On update, omit it to preserve the previously stored value.
iOS (Apple App Attest)
Configure the iOS platform under the attestation.apple block. Verification runs entirely on the server: ThunderID validates the attestation certificate chain against Apple's App Attest root certificate authority, then checks the attested app against the registered identity. This platform uses only non-secret identifiers, so nothing is stored write-only.
| Setting | Description |
|---|---|
| Team ID | The Apple Developer Team ID (for example, ABCDE12345). |
| Bundle ID | The iOS application bundle identifier (for example, com.example.myapp) that must match the attested app. |
The trust anchor used to validate the attestation certificate chain is a server-level setting, shared by every application, rather than a per-application one. It is configured under the attestation.apple.root_certificate key in deployment.yaml and holds the PEM-encoded Apple App Attestation Root CA certificate. ThunderID ships the public Apple root as the default in config/default.json, valid until 2045, so no configuration is required to verify iOS attestations out of the box.
Override this only if Apple publishes a new App Attestation Root CA. To do so, add the replacement certificate to deployment.yaml, which takes precedence over the shipped default:
attestation:
apple:
root_certificate: |
-----BEGIN CERTIFICATE-----
<your PEM-encoded certificate>
-----END CERTIFICATE-----
Related Guides
- Manage Applications - Create, update, and delete applications
- OAuth & OIDC - Protocol-by-protocol reference for OAuth 2.1 and OpenID Connect features
- Flows - Build and assign custom authentication and registration flows