Implementing Single sign-on (SSO) for AdButler
AdButler supports Single sign-on (SSO) providers that use the OpenID Connect (OIDC) protocol (built on OAuth 2.0), such as Okta, Microsoft Entra ID, and Google. Contact our support team if you want to implement SSO for your AdButler account.
Currently SSO setup is assisted by our support team, though it will be user configurable in the dashboard soon.
For every provider:
- The sign-in redirect / callback URI is the same:
https://admin.adbutler.com/sso/oidc/callback.spark - AdButler acts as a confidential client using the Authorization Code flow (PKCE supported), so the app must authenticate with a client secret.
- The app must request the
openid,profile, andemailscopes. We match each sign-in to an existing AdButler user by theemailclaim, so that scope is required.
Okta
- Create an app integration — sign-in method OIDC, application type Web Application.
- Grant type: Authorization Code (PKCE S256 supported). Client authentication: Client secret.
- Sign-in redirect URI:
https://admin.adbutler.com/sso/oidc/callback.spark - (Optional) Sign-out redirect URI, if you want users returned somewhere specific after logout.
- Confirm the
openid,profile, andemailscopes are available. - Assign users/groups to the app, and make sure each assigned user has an email populated in their Okta profile.
- Record the client ID + client secret. Provide these to us securely.
- Record the issuer. Provide this to us. This is either:
- the org authorization server:
https://<org>.okta.com, or - a custom authorization server:
https://<org>.okta.com/oauth2/<auth-server-id>(the built-in one is.../oauth2/default). - Use whichever server you configured the app against. If your Okta uses a custom domain, substitute that domain (eg.
https://login.example.com). Example org URL:https://integrator-123456.okta.com(a developer-preview domain — production tenants are usuallyhttps://<org>.okta.com).
- the org authorization server:
Microsoft Entra ID
- In the Entra admin center, go to Identity → Applications → App registrations → New registration.
- Set the platform to Web and add the redirect URI:
https://admin.adbutler.com/sso/oidc/callback.spark - Choose the supported account types (typically Accounts in this organizational directory only — single tenant).
- Under Certificates & secrets, create a new client secret and copy its value immediately (it is only shown once — the value, not the secret ID).
- Under API permissions, confirm the delegated Microsoft Graph permissions
openid,profile, andemailare present. (Authorization Code with PKCE is supported.) - Under Token configuration → Add optional claim, choose token type ID and add the
emailclaim. A default app registration does not always includeemailin the OIDC response, so this step is required; if prompted, let Entra enable the associated Microsoft Graphemailpermission. - Assign users/groups: in Enterprise applications → your app → Users and groups, add the users/groups who should have access (set Assignment required if you want to restrict it). Make sure each user has an email/UPN that matches their AdButler user.
- Record the Application (client) ID + client secret value. Provide these to us securely.
- Record the issuer
https://login.microsoftonline.com/<tenant-id>/v2.0(your tenant/directory ID is on the app's Overview page — use the v2.0 endpoint). Provide this to us.
- In the Google Cloud Console, open APIs & Services → OAuth consent screen and configure it (choose Internal to limit sign-in to your Google Workspace organization).
- Go to APIs & Services → Credentials → Create credentials → OAuth client ID.
- Application type: Web application.
- Add the authorized redirect URI:
https://admin.adbutler.com/sso/oidc/callback.spark - Ensure the requested scopes include
openid,profile, andemail. - Create the client and record the client ID + client secret. Provide these to us securely. (Authorization Code with PKCE is supported.)
- The issuer is always
https://accounts.google.com— there is no per-account issuer value to record.
Note: Google does not offer per-app user/group assignment the way Okta and Entra ID do. Which users can sign in is controlled by the OAuth consent screen setting (Internal = anyone in your Workspace organization) and by your Google Workspace user management.
Signing in
Once configured, when you access your account-specific auth URL you will be offered your provider(s) as a sign-in method. Selecting one starts a standard OIDC Authorization Code flow (with PKCE) against that provider, and on return we link the auth attempt to an existing AdButler user via the email claim.
Your account login URL will be
https://admin.adbutler.com/login.spark?ID=<AccountId>, or- A custom admin domain
Important: the user's email in your identity provider must match their AdButler user email exactly. If the emails differ (or the email claim isn't returned), the sign-in won't link to an account. (On Entra ID this is a common cause of failure — see the optional-claim step above.)
Once set up, support can enforce SSO-only logins at your request.
Provisioning strategy
Provisioning
- Create the user in your identity provider (Okta / Entra ID / Google).
- Create the user in AdButler with a matching email and the appropriate role.
Deprovisioning
- Disable or delete the user in your identity provider.
- Disable or delete the user in AdButler.
Since SSO logins are required, the user would only be able to log in via your identity provider.
NOTE: If the user is already logged in to AdButler, removing/disabling them in the identity provider won't remove that session token immediately. We recommend using the API to disable the user via an automation of some sort, but it may also be possible to design a hook in your provider (for example an Okta event hook, an Entra ID / Logic App workflow, or a Google Workspace Apps Script routine) to do the same. We can provide sample API calls if necessary.