Set up custom OIDC
One less password for your users. Connect any OpenID Connect provider - Okta, Auth0, Keycloak, or your own identity server - and let users sign in with their existing work accounts.
Overview
Custom OIDC lets you integrate any OAuth 2.0 / OpenID Connect identity provider beyond the built-in social logins. This is ideal for:
- Enterprise SSO - Okta, Azure AD, Auth0, OneLogin, PingFederate
- Self-hosted identity - Keycloak, Authentik, Zitadel, Authelia
- Custom providers - Any service that supports OIDC discovery or manual OAuth 2.0 configuration
Configure Custom OIDC
Step 1: Register Quackback in your identity provider
Create an OAuth / OIDC application in your identity provider with these settings:
| Field | Value |
|---|---|
| Application type | Web application |
| Redirect URI | https://YOUR_DOMAIN/api/auth/callback/custom-oidc |
| Scopes | openid email profile |
Note the Client ID and Client Secret.
Step 2: Add credentials in Quackback
[Dashboard]
- Go to Admin → Settings → Portal Authentication (or Security for team auth)
- Find Custom OIDC in the provider list
- Fill in the required fields:
| Field | Description | Required |
|---|---|---|
| Display Name | Name shown on the sign-in button (e.g. "Okta", "Company SSO") | Yes |
| Client ID | From your identity provider | Yes |
| Client Secret | From your identity provider | Yes |
| Discovery URL | OIDC discovery endpoint (recommended) | No |
| Authorization URL | OAuth authorize endpoint | If no Discovery URL |
| Token URL | OAuth token endpoint | If no Discovery URL |
| Scopes | Space-separated scopes | No (defaults to openid email profile) |
Use the Discovery URL when your provider supports it. Quackback auto-discovers the authorization and token endpoints from /.well-known/openid-configuration, so you don't need to enter them manually.
Step 3: Enable the provider
Toggle Custom OIDC on in the Portal Authentication or Security settings. The sign-in button appears immediately.
Provider examples
Okta
| Field | Value |
|---|---|
| Display Name | Okta |
| Discovery URL | https://your-org.okta.com/.well-known/openid-configuration |
| Client ID | From Okta app |
| Client Secret | From Okta app |
Auth0
| Field | Value |
|---|---|
| Display Name | Auth0 |
| Discovery URL | https://your-tenant.auth0.com/.well-known/openid-configuration |
| Client ID | From Auth0 app |
| Client Secret | From Auth0 app |
Keycloak
| Field | Value |
|---|---|
| Display Name | Keycloak |
| Discovery URL | https://keycloak.example.com/realms/your-realm/.well-known/openid-configuration |
| Client ID | From Keycloak client |
| Client Secret | From Keycloak client |
Manual configuration (no discovery)
If your provider doesn't support OIDC discovery, provide the URLs directly:
| Field | Value |
|---|---|
| Authorization URL | https://provider.example.com/oauth/authorize |
| Token URL | https://provider.example.com/oauth/token |
| Scopes | openid email profile |
How it works
- User clicks the custom sign-in button on the login page
- Quackback redirects to your identity provider's authorization endpoint
- User authenticates with their existing credentials
- Provider redirects back to Quackback with an authorization code
- Quackback exchanges the code for user information (email, name)
- A session is created
Quackback uses the email claim from the OIDC token to identify users. If a user with that email already exists, the account is linked automatically.
Troubleshooting
"Redirect URI mismatch"
The redirect URI in your identity provider must match exactly:
https://YOUR_DOMAIN/api/auth/callback/custom-oidc
Check for protocol mismatches (http vs https), trailing slashes, and port numbers.
"Invalid client_id"
Verify the Client ID and Client Secret are copied correctly with no extra whitespace. Check that the OIDC application is active in your identity provider.
"Unable to get email"
Quackback requires an email address from the OIDC provider. Ensure:
- The
emailscope is included - Your provider returns the
emailclaim in the ID token or userinfo response
Discovery URL not working
If auto-discovery fails:
- Verify the URL returns valid JSON when accessed in a browser
- Try providing the Authorization URL and Token URL manually instead
Next steps
- OAuth - Built-in social login providers
- Authentication Overview - All auth options
- Portal Authentication - Configure sign-in for portal users