Identity provider setup guides
Per-vendor walkthroughs for the SSO connection wizard described in SSO. Use these to configure your IdP application before clicking Done on the Configure your IdP panel in Praxis.
Every guide follows the same shape:
- Create an application in the IdP.
- Paste the service provider values (ACS URL, Audience / Entity ID, redirect URL) shown in Praxis after registration.
- Configure user attributes — at minimum email; usually first name and last name as well.
- Configure a group / role attribute so role mapping can resolve a Praxis role for each user.
- Provide the IdP metadata URL (or pasted XML) — or for OIDC the discovery URL, client ID, and client secret — back to Praxis.
Email is required. If the IdP does not send an
Common SAML attributes
The platform recognizes several common attribute name variants for each field — your IdP can use any of them.
| Field | Recognized attribute names | Required |
|---|---|---|
email, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress, urn:oid:0.9.2342.19200300.100.1.3 | Yes | |
| First name | firstName, givenName, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname, urn:oid:2.5.4.42 | No |
| Last name | lastName, surname, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname, urn:oid:2.5.4.4 | No |
| NameID | Built-in SAML field | Recommended (use email or persistent format) |
| Groups / roles | Custom — pick a name like groups, roles, or department and use the same string in Praxis role mapping | Required only if you use role mapping |
The role-mapping attribute can carry a single string or an array; both formats are accepted.
Common OIDC claims
| Field | Default OIDC claim | Notes |
|---|---|---|
email | Required. The boolean email_verified claim is also passed through if present. | |
| First name | given_name | Optional. |
| Last name | family_name | Optional. |
| Display name | name | Optional fallback when given_name / family_name are absent. |
| Subject | sub | Built-in stable identifier — preferred over email for linking users to an IdP record. |
| Groups / roles | Custom — typically groups or roles; Auth0 requires a namespaced URI like https://praxis/roles | Required only if you use role mapping. |
Praxis reads claim names exactly as configured under role mapping. Most IdPs use a plain name like groups; Auth0 needs a namespaced URI (see Auth0 OIDC).
Okta
-
Applications → Create App Integration → SAML 2.0.
-
General settings: name (for example Praxis), optional logo.
-
Configure SAML:
- Single sign-on URL = ACS URL from Praxis.
- Audience URI (SP Entity ID) = Audience value from Praxis.
- Name ID format =
EmailAddress. Application username =Email.
-
Attribute Statements:
Name Name format Value emailUnspecified user.emailfirstNameUnspecified user.firstNamelastNameUnspecified user.lastName -
Group Attribute Statements (for role mapping):
Name Name format Filter Value groupsUnspecified Matches regex .*(or scope to specific groups) -
Sign On tab → View SAML setup instructions → Identity Provider metadata — copy the metadata URL.
-
In Praxis, finish the SSO wizard with that metadata URL and a role-mapping
attributeofgroups.
OIDC
- Applications → Create App Integration → OIDC - OpenID Connect → Web Application.
- General settings: name (for example Praxis), optional logo.
- Grant type: keep Authorization Code (selected by default; required).
- Sign-in redirect URIs = redirect URL from Praxis.
- Sign-out redirect URIs (optional) = post-logout URL from Praxis if shown.
- Assignments = restrict to a specific group/user set, or Allow everyone in your organization to access. Save.
- From the General tab, copy Client ID and Client secret.
- Add a
groupsclaim so role mapping has something to match on:- Security → API → Authorization Servers →
default→ Claims tab → Add Claim. - Name =
groups. Include in token type = ID Token, Always. Value type = Groups. Filter = Matches regex.*(or narrow topraxis-.*). Save.
- Security → API → Authorization Servers →
- Issuer URL =
https://<your-domain>.okta.com/oauth2/default. The discovery URL Praxis needs is<issuer>/.well-known/openid-configuration. - In Praxis, finish the wizard with discovery URL + Client ID + Client secret. Set role-mapping
attribute = groups.
Microsoft Entra ID (Azure AD)
-
Enterprise applications → New application → Create your own → Non-gallery.
-
Open the app, then Single sign-on → SAML.
-
Basic SAML Configuration:
- Identifier (Entity ID) = Audience from Praxis.
- Reply URL (ACS) = ACS URL from Praxis.
-
Attributes & Claims — keep the defaults for email/given/surname, or add unprefixed names if you prefer:
Claim name Source attribute http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressuser.mailhttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/givennameuser.givennamehttp://schemas.xmlsoap.org/ws/2005/05/identity/claims/surnameuser.surname -
Add a group claim:
- Source = Security groups or Directory roles.
- Customize the claim name to
groups. - Source attribute: sAMAccountName, Cloud-only group display names, or Group ID — pick whichever string you will use in Praxis role mapping.
-
SAML Signing Certificate → App Federation Metadata Url — this is the metadata URL to paste into Praxis.
Group ID vs name: Entra ID often emits group object IDs (UUIDs) instead of display names. If you do, use those object IDs as the IdP value in each role-mapping row.
Overage claim: Users in roughly 200+ groups trigger Entra's overage behavior; the assertion contains a link instead of the group list and role mapping cannot resolve. Mitigate by mapping app roles instead, or by filtering the SAML group claim to a small set.
OIDC
- Entra admin center → Entra ID → App registrations → New registration.
- Name the app. Supported account types = Accounts in this organizational directory only (single tenant) for most cases.
- Redirect URI = platform Web → paste the redirect URL from Praxis. Click Register.
- From the Overview page, copy Application (client) ID and Directory (tenant) ID.
- Certificates & secrets → Client secrets → New client secret → set expiry → copy the Value immediately (Entra only shows it once).
- Token configuration → Add groups claim → choose Security groups (or Directory roles / All groups). For ID and Access token formats, Group ID is the safest choice (display names can change). Save.
- Optional — app roles instead of groups:
- App roles → Create app role with Value = the string Praxis should match (for example
praxis-admin). Allowed member types = Users/Groups. - Assign users via Entra ID → Enterprise applications → your app → Users and groups → Add user/group.
- App roles arrive in the
rolesclaim instead ofgroups.
- App roles → Create app role with Value = the string Praxis should match (for example
- API permissions — the default
User.Read(Microsoft Graph delegated) is enough for sign-in. Grant admin consent if required. - The OIDC discovery URL is
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration. - In Praxis, paste discovery URL + Client ID + Client secret. Set role-mapping
attribute = groups(orrolesif you used app roles). For groups by Group ID, the IdP value in each mapping row is the group's object ID (UUID).
Overage applies to OIDC too — the ~200-group limit triggers a
_claim_names/_claim_sourcespointer to Graph instead of the group list. Use app roles for users in many groups.
Google Workspace
Google Workspace does not send group memberships in SAML by default. You either map a custom user attribute into the assertion, or use Google Groups → SAML attribute (Enterprise/Education editions).
Custom-attribute approach (works on all editions)
-
Admin Console → Apps → Web and mobile apps → Add custom SAML app.
-
Google Identity Provider details: Download Metadata (you will give this XML to Praxis). Click Continue.
-
Service provider details:
- ACS URL = ACS URL from Praxis.
- Entity ID = Audience from Praxis.
- Name ID format =
EMAIL, Name ID = Basic Information → Primary email.
-
Directory → Users → More options → Manage custom attributes → Add Custom Attribute:
Field Value Category PraxisCustom field name RoleInfo type Text Visibility Visible to organization Number of values Single (or Multi if a user may carry multiple roles) -
Open each user that should sign in via SSO and set Praxis → Role (for example
praxis-admin,praxis-member,praxis-viewer). -
Back in the SAML app, SAML attribute mapping:
Google attribute App attribute Basic Information → Primary email emailBasic Information → First name firstNameBasic Information → Last name lastNamePraxis → Role roles -
User access → ON for everyone (or a specific OU/group). Allow a few minutes for propagation.
-
In Praxis, finish the wizard with the metadata XML and a role mapping
attributeofroles.
Group-based approach (Workspace Enterprise/Education)
In the SAML app, open Group membership (optional), list the Google Groups you want to surface (for example [email protected]), and set App attribute = roles. Use the group email as the value in each role-mapping row.
Bulk role assignment: Use the Workspace Bulk update users CSV import to set the custom attribute (
customSchemas.Praxis.Role) for many users at once.
OIDC variant
Google's OIDC implementation does not emit Google Group membership as a claim. Use OIDC only if all SSO users share the same role (set default_role in Praxis) or if you provision per-tenant roles inside Praxis after first login. For per-user roles driven by the IdP, stay on the SAML custom-attribute flow above.
- Google Cloud Console → APIs & Services → Credentials → Create credentials → OAuth client ID.
- First time only: configure the OAuth consent screen — set User type to Internal for Workspace-only access (no Google verification needed), or External with a verified domain.
- Application type = Web application. Name it (for example Praxis).
- Authorized redirect URIs = paste the redirect URL from Praxis. Click Create.
- Copy the generated Client ID and Client secret (you can also download the JSON for safekeeping).
- The OIDC discovery URL is
https://accounts.google.com/.well-known/openid-configuration. Praxis requests the standard scopesopenid email profile. - In Praxis, paste discovery URL + Client ID + Client secret. Leave role-mapping
attributeempty so the connection'sdefault_roleapplies to every user, or rely on Praxis-side per-tenant role assignment after first login.
Auth0
-
Applications → Create Application → Regular Web Application.
-
Addons tab → SAML2 Web App → enable. Set Application Callback URL = ACS URL from Praxis.
-
In the addon Settings JSON:
{"mappings": {"email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress","given_name": "firstName","family_name": "lastName"},"nameIdentifierProbes": ["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]} -
User Management → Roles — create the roles you want to map (for example
praxis-admin,praxis-member,praxis-viewer). Assign users. -
Inject roles into the SAML assertion via an Action on the Login flow:
exports.onExecutePostLogin = async (event, api) => {const assignedRoles = event.authorization?.roles || [];if (event.transaction?.protocol === 'samlp') {api.samlResponse.setAttribute('roles', assignedRoles);}};(Auth0's legacy Rules also work; Actions are the recommended path.)
-
In the SAML2 addon, copy the Identity Provider Metadata URL (typically
https://<your-tenant>.auth0.com/samlp/metadata/<client-id>) and paste it into Praxis. -
In Praxis role mapping, use
attribute = rolesand add one row per Auth0 role.
OIDC variant
-
Applications → Create Application → Regular Web Application. Name it; the technology choice on the next screen does not affect the OIDC setup.
-
Settings tab → Application URIs → Allowed Callback URLs = redirect URL from Praxis. Save.
-
From the Settings tab copy Domain, Client ID, and Client Secret.
-
User Management → Roles — create the roles to map (for example
praxis-admin,praxis-member,praxis-viewer) and assign users. -
Auth0 does not include roles in tokens by default. Add an Action under Actions → Library → Build Custom, attach it to the Login flow, then deploy:
exports.onExecutePostLogin = async (event, api) => {const roles = event.authorization?.roles || [];api.idToken.setCustomClaim('https://praxis/roles', roles);api.accessToken.setCustomClaim('https://praxis/roles', roles);};Custom claim names must be namespaced with a URI you control — Auth0 silently drops unnamespaced custom claims.
-
The OIDC discovery URL is
https://<your-tenant>.auth0.com/.well-known/openid-configuration(or your custom domain). -
In Praxis, paste discovery URL + Client ID + Client secret. Set role-mapping
attribute = https://praxis/roles— the full namespaced URI, including thehttps://prefix.
OneLogin
-
Applications → Add App → SAML Custom Connector (Advanced).
-
Configuration tab: Audience and ACS (Consumer) URL = the values from Praxis.
-
Parameters tab — Add the following with "Include in SAML assertion":
Field name Value emailEmail firstNameFirst Name lastNameLast Name groupsUser Roles or Groups -
SSO tab → Issuer URL — that is your metadata URL. Paste it into Praxis.
-
In Praxis role mapping, use
attribute = groups.
OIDC variant
- Applications → Applications → Add App → search OpenID Connect (OIDC) → select it.
- Display Name = for example Praxis. Save.
- Configuration tab:
- Login URL = your Praxis login URL (optional, surfaces the app in OneLogin's launcher).
- Redirect URIs = redirect URL from Praxis (one per line if you have multiple environments).
- SSO tab:
- Copy Client ID.
- Click Show client secret and copy Client Secret.
- Application Type = Web.
- Under Token Endpoint, set Authentication Method = POST (or Basic — match what your Praxis deployment expects; POST is the OneLogin default).
- Right-click Well-known Configuration to copy the discovery URL — format:
https://<subdomain>.onelogin.com/oidc/2/.well-known/openid-configuration.
- Parameters tab → Add parameter:
- Field name =
groups. - In the parameter edit dialog, check Include in User Info and Include in ID Token.
- Value = User Roles (or Groups if you organize users by OneLogin groups).
- Field name =
- Access tab — assign the OneLogin Roles allowed to use this app.
- In Praxis, paste discovery URL + Client ID + Client secret. Set role-mapping
attribute = groups.
Generic SAML or OIDC
If your IdP is not in the presets, use SAML IdP or OIDC IdP in the connection wizard.
- SAML IdP — provide a metadata URL (preferred) or paste the metadata XML. Configure the IdP to send
email, optionallyfirstName/lastName, and a custom group/role attribute (oftengroupsormemberOf). - OIDC IdP — provide the discovery URL (
/.well-known/openid-configuration), the client ID, and the client secret. Make sure the IdP includes agroups(or similar) claim for role mapping; Praxis reads the claim name you configure under role mapping.
Role mapping — worked example
Suppose your IdP sends a groups attribute that lists Active Directory groups. In the SSO connection's role mapping panel:
{
"attribute": "groups",
"default_role": "viewer",
"mappings": [
{ "value": "praxis-owners", "role": "owner" },
{ "value": "praxis-admins", "role": "admin" },
{ "value": "engineering", "role": "member" }
]
}
Behaviour:
User's groups | Resolved Praxis role | Reason |
|---|---|---|
["engineering"] | member | Single match |
["engineering","praxis-admins"] | admin | Multiple matches; highest privilege wins |
["praxis-owners","praxis-admins"] | owner | Highest privilege wins |
["marketing"] | viewer | No match → default_role |
| (attribute missing) | viewer | No attribute → default_role |
Matching is case-insensitive for both attribute values and role names. Order in mappings does not matter.
Pre-flight checklist
Before clicking Done in the Praxis SSO wizard:
- Email attribute is configured and reaches the assertion / token.
- First name / last name attributes are configured (recommended).
- NameID is email or a stable persistent ID.
- Group / role attribute is configured if you use role mapping.
- Each row in role mapping uses an exact IdP value (UUIDs for Entra group object IDs, group emails for Google Groups, etc.).
- ACS URL / Reply URL matches the value Praxis showed you.
- Audience / Entity ID matches the value Praxis showed you.
- You have provided the IdP metadata URL or XML (SAML), or discovery URL + client credentials (OIDC), to Praxis.
- You have assigned at least one test user to the IdP application.
If sign-in still fails, see Troubleshooting.
See also
- SSO — overview, scope (org-wide vs tenant), and Enforce SSO.
- Concepts and terminology — what role, scope, and tenant mean here.
- Troubleshooting — common SSO and role-mapping problems.