OIDC Federation Setup Guide (SSO)
This
Setting document describes the requirements for setting upUp Single Sign-On (SSO) viawith OpenIDAdhese
This (OIDC)guide betweenexplains what's needed to connect your company's login system (your "Identity ProviderProvider" (IdP)or andIdP — e.g. Okta, Azure AD, OneLogin, Keycloak) to the Adhese platform.platform, so your users can log in with their existing company account instead of a separate Adhese password.
We've tried to keep this guide free of unnecessary jargon. Where a technical term is unavoidable, we explain it in plain language the first time it appears.
It is probably best to direct your organizations' IdP responsible to this document, because they will be best suited to go through its steps.
1. Overview — how this works
WeThink useof OIDC-basedit identitylike federationusing to"Sign allowin with Google" on another website. Instead of Adhese storing a password for your users, your users to log in tothrough your own company system. Once they're verified there, your system tells Adhese "this person is who they say they are, and here's some basic info about them."
The technology that makes this handshake work is called OIDC (OpenID Connect) — a standard way for two systems to exchange "this user authentication.is verified, here's who they are" information.
2. InformationWhat Wewe Needneed Fromfrom Youyou
To configureconnect theto connectionyour on our side,IdP, we need thea followingsmall fromset of technical addresses and credentials. Your IT/identity team will have these, or can generate them when creating a new application/integration for Adhese in your IdP:IdP.
| Item | |
|---|---|
| Discovery URL | |
| Authorization endpoint | |
| Token endpoint | |
| UserInfo endpoint | |
| JWKS URI | |
| Client ID | |
| Client Secret |
client_secret_post or client_secret_basic.
Supported scopes
Confirmation that your IdP can send us the
IfSimplest path: if your IdPsupportshas a discoveryendpoint,URL,mostyouofreallytheonlyaboveneedcantobegivederived automatically. In that case, providingus: the discovery URL, the Client ID,andthe ClientSecretSecret,isandsufficient.the client authentication method.
3. InformationWhat Wewe Providegive To Youyou
YouTo willset needthings theup following from us to configureon your IdP:side, we'll send you:
| Item | |
|---|---|
| Redirect URI (Callback URL) | |
| Required scopes | |
| Required claims |
4. RequiredScopes and claims, explained simply
Think of it this way:
For example, ticking the email scope is what allows the email claim (the user's actual email address) to be included.
4.1 Scopes and Claimsclaims
Requiredwe Scopesrequire
| Scope (the permission) |
|---|
openid
subemailemailemail_verifiedRequired Claims
sub
openidA email
email
email
email_verified
emailA true/false true.email_verified: falseemail_verified⚠️ Important:
TheSome IdPs don't sendemail_verifiedclaimautomatically,is an optional claim per the OIDC specification, meaning IdPs are not required to include it by default. Please verify that your IdP is configured to include this claim in the ID tokeneven when therequested.enabledAdditionally,— it's technically an optional field in thevalueOIDCmuststandard.bePlease double-check with whoever manages your IdP that this field is switched on and will readtrue—forusersyourwhoseusers.addressit'shasmissing,notorbeensetverifiedtoatfalse, theIdP levellogin willnotbeable to log in.rejected.
Optional4.2 ScopesOptional: andshowing Claimsreal names in Adhese
TheEnabling the profile scope is not requiredrequired, but recommended. It enableslets us toshow displayyour user-friendlyusers' actual names in the Adhese UI.interface instead of just an ID or email address.
| Scope |
|---|
profile
name
profilegiven_nameprofile
profilegiven_namefamily_nameprofile
profilefamily_namepreferred_usernameprofile
profilepreferred_username5. RoleClient Mappingauthentication method (Optional)client_auth_mode)
UserWhen rolesAdhese cantalks beto managedyour directlyIdP withinto confirm a login, we have to prove we are who we say we are, using the AdheseClient platform.ID However,and ifClient youSecret preferfrom Section 2. There are two common ways to managesend rolesthat centrallyproof, fromand your IdP,IdP will only accept one of them — so we supportneed automaticto roleknow assignmentwhich.
client_secret_basic
The Client ID and Secret are sent using a client_secret_post
The Client ID HowSecret Itare Works
sent adhese_roleNeither option is more or less secure in practice — it's purely about which format your IdP expects. Most modern IdPs support both, and their app registration screen will usually have a dropdown or setting labeled something like "Token endpoint authentication method." Please check this setting and let us know which namevalue youit's useset to, so we canconfigure configureour side to match. If we don't match your IdP's expectation, the login exchange will fail even if everything else is correct.
6. Role mapping
How ourit side.works
You (or your IdP admin) pick a claim name — for example adhese_role — and tell us that name. From then on, whatever value(s) come through in that claim will decide what roles the user gets in Adhese, updated automatically every time they log in.
The value can bebe:
SingleOne role example:role:
{
"adhese_role": "admin"
}
Multiple roles example:roles:
{
"adhese_role": ["viewer", "creative_approver"]
}
The important part: the claim name you chose becomes a normal, top-level field in the token, with the role name(s) as its value. Nothing more nested or wrapped around it.
Extra scope
If your idp expects us to send a specific scope before it embeds the custom claim in the token, you need to let us know the scope we have to request.
Available Rolesroles — Classic UI
| Role | Description |
|---|---|
classic_admin |
Full |
classic_read_only |
Read-only access to the Classic |
Available Rolesroles — New UI
| Role | Description |
|---|---|
admin |
Full administrator |
creative_approver |
Can approve creatives |
creative_master |
Full creative management |
managed_ad_master |
Managed advertising management |
self_service_ad_master |
Self-service advertising management |
viewer |
Read-only access |
access_all_advertisers_debtors_brands |
Access across all advertisers, debtors, and brands |
Examples
{ "bidfood_role": "adheseAdmin" }If a user has more than one role:
{ "bidfood_role": ["adheseAdmin", "adheseOtherRole"] }💡 Tip: Some IdPs also require you
dotonotseparatelyconfigureenable a scope before a custom claim will actually be included in the token — even if the claim itself looks correctly configured. For example, some setups need aparams(or similarly named) scope explicitly requested before the custom rolemapping,claimrolesshowswillup at all. If your custom role claim isn't arriving, check whether an additional scope needs to bemanagedrequested,manuallyandwithinlettheusAdheseknowplatformitsbyexactannameadministrator.so we can add it to our request.
6.7. SetupChecklistchecklistYour side (IdP)
Confirm which client authentication method your IdP uses:
- Register a new OIDC
client/applicationapplication/client for AdheseConfigureAdd the redirect URIprovidedweby usprovide as an allowed callbackURLEnsureEnable theopenidandare enabledVerifythatConfirm theemail_verifiedclaim is includedinandthewillID token with a value ofreadtrue| if not, let us knowclient_secret_postorclient_secret_basic(Optional) Enable theprofilescope for real names (Optional)ConfigureSet up a custom claim for rolemappingmapping, making sure it outputs a plain value (see Section 6's common mistake)Sharethe(Optional) Confirm whether an extra scope is needed to expose that custom claim Send us: Client ID, Client Secret,anddiscovery URL (or individual endpoints),withclientusauthentication method, wether or notemail_verifiedclaim will be set correctlyOur side (Adhese)
Configure scope requests (
- Provide the redirect URI
- Configure the
IdPconnection withtheyour provided endpoints and credentials- Configure the client authentication method to match yours
openid,andoptionallyprofile) Configureessential claimvalidationforsoemail_verifiedmust betrue(Optional) Configure role mapping based on the agreedcustomclaim Perform a test login together
7.8. TestingOnce both sides are
configured,setweup,recommendwe'llperformingdo ajointtesttest:login together:
InitiateStart a login on the Adhese platformVerify thatConfirm the redirect to your IdP workscorrectlyAuthenticateLog in with a test userVerify thatConfirm thecallbackreturn trip back to Adhese succeeds- Confirm
thatthe user's email andprofilenameinformation aredisplay correctlydisplayed- (If applicable) Confirm
thattherolecorrectmappingrole(s)iswere appliedcorrectlyIf the test login fails
with an error related to the essential claim, theThe most common
causescauses,are:in order of likelihood:A custom role claim contains the IdP's raw parameter configuration instead of a plain value (see the common mistake in Section 6)
- The
isisn'tnotactually enabled on the IdP side- The
email_verifiedclaimis notisn't included in theIDtokentokenat all- The user's email
isisn'tnotmarked verified at the IdPlevel(email_verified: false)- The client authentication method (Section 5) doesn't match what we configured on our side