Connecting your identity provider
In short
Section titled “In short”This page tells whoever runs your identity provider (IdP) what SpeculaPro needs. It lists only the values SpeculaPro shows you and what it expects to receive. Menus differ between IdP versions, so the steps on the IdP side are described in general terms: follow your IdP’s own guide for “register an OpenID Connect web application” or “add a SAML application”.
Every connection follows the same pattern:
- Copy SpeculaPro’s values from Settings → Single sign-on.
- Register SpeculaPro at the IdP with them.
- Copy the IdP’s values back into SpeculaPro and save.
- Claim your email domains.
- Run Test connection and read what arrived: email, groups and multi-factor.
What SpeculaPro gives you
Section titled “What SpeculaPro gives you”| Value | Where it’s shown | Used by |
|---|---|---|
| Redirect URI | OpenID Connect panel | OIDC. It is your SpeculaPro address followed by /api/v1/auth/sso/oidc/callback |
| Post-logout redirect URI | OpenID Connect panel | OIDC, optional. Your SpeculaPro address followed by /login |
| SP entity ID (audience) | SAML panel | SAML. Your SpeculaPro address followed by /api/v1/auth/sso/saml/<workspace>/metadata |
| ACS URL (HTTP-POST) | SAML panel | SAML. Your SpeculaPro address followed by /api/v1/auth/sso/saml/<workspace>/acs |
| Single logout URL (HTTP-Redirect or HTTP-POST) | SAML panel | SAML, optional. Your SpeculaPro address followed by /api/v1/auth/sso/saml/<workspace>/slo. See Signing out |
| SP metadata | Download SP metadata, once SAML settings are saved | SAML. Contains the entity ID, the ACS URL, the single logout URL and SpeculaPro’s signing certificate |
| SCIM base URL (tenant URL) and a token | SCIM provisioning panel | Optional, either protocol. Lets the IdP create and deactivate accounts and push groups. See SCIM provisioning |
Always copy these from Settings rather than typing them: the workspace name and your address must match exactly.
What SpeculaPro needs back
Section titled “What SpeculaPro needs back”| OpenID Connect | SAML 2.0 | |
|---|---|---|
| The IdP’s identity | The issuer URL. SpeculaPro reads /.well-known/openid-configuration from it |
The IdP metadata, as a URL or pasted XML. It must offer an HTTP-Redirect single sign-on service |
| Credentials | A client ID and client secret for a web application using the authorization code flow | None: trust comes from the signing certificate in the metadata |
| Who the person is | sub (always present) |
A persistent or email NameID. Transient NameIDs are refused |
The email claim, with email_verified set to true (or turn that check off; see the caution) |
An email attribute (mail, email, emailaddress and their common long forms are found automatically) or an email NameID |
|
| Groups (only if you map groups to roles) | A claim listing them, often groups |
An attribute listing them |
| Multi-factor (optional) | amr or acr values |
AuthnContextClassRef, or Microsoft’s authnmethodsreferences attribute |
| Signing | Tokens signed with an asymmetric key (RSA, ECDSA or EdDSA). Tokens signed with the client secret (HMAC) are refused | Each assertion signed. Signing only the response isn’t enough |
Microsoft Entra ID (OpenID Connect)
Section titled “Microsoft Entra ID (OpenID Connect)”- In Entra ID, register a web application. Add SpeculaPro’s Redirect URI as a web redirect URI, and the Post-logout redirect URI as the front-channel sign-out destination if you want sign-out to reach Entra ID too.
- Create a client secret and note when it expires.
- In SpeculaPro, enter:
- Issuer URL: Entra ID’s v2.0 issuer for your tenant, in the form
https://login.microsoftonline.com/<your tenant ID>/v2.0; - the application’s client ID and the client secret.
- Issuer URL: Entra ID’s v2.0 issuer for your tenant, in the form
- Make sure the token carries the user’s email. Entra ID doesn’t always include
emailandemail_verifiedin ID tokens. Run Test connection: if the email is missing (email_missing) or not marked verified (email_not_verified), add the optional email claim in Entra ID, or, if only your IT team can set users’ addresses, turn off Require a verified email. - For groups, configure Entra ID to emit the groups claim and set Groups claim or attribute to
groups. Entra ID sends group object IDs by default: put those IDs in the Group → role table. - Entra ID reports multi-factor with
mfainamr, which is in the default list.
Provisioning (optional). Under the enterprise application’s Provisioning, choose automatic
mode, enter SpeculaPro’s SCIM base URL as the Tenant URL and a SpeculaPro SCIM token as the
Secret Token. Whatever attribute you map to userName must hold the person’s email address.
Groups arrive over SCIM by name, so put group names in the Group → role table if you provision
groups. See SCIM provisioning.
Okta supports both protocols. Choose one.
OpenID Connect
- In Okta, create an OIDC web application with the authorization code grant. Add SpeculaPro’s Redirect URI as a sign-in redirect URI and the Post-logout redirect URI as a sign-out redirect URI.
- In SpeculaPro, enter the issuer of the Okta authorization server you use (your Okta domain, or an authorization server under it), the client ID and the client secret.
- For groups, add a groups claim to the ID token in Okta, add its scope to SpeculaPro’s Scopes if your Okta setup requires one, and enter the claim name under Groups claim or attribute.
SAML
- In Okta, create a SAML 2.0 application. Use SpeculaPro’s ACS URL as the single sign-on URL and the SP entity ID as the audience.
- Make sure assertions are signed, and choose an email-address NameID.
- Add a group attribute statement if you map groups to roles.
- In SpeculaPro, give the application’s metadata URL, or paste its metadata XML.
Provisioning (optional, either protocol). In the Okta application’s provisioning settings, use
SpeculaPro’s SCIM base URL as the SCIM connector base URL, userName as the unique identifier,
and a SpeculaPro SCIM token as the bearer token (HTTP header authentication). The Okta username
sent as userName must be the person’s email address. See SCIM provisioning.
Okta’s urn:okta:loa:2fa:any and the OIDC values mfa and otp are in the default multi-factor
list.
Google Workspace (SAML)
Section titled “Google Workspace (SAML)”- In Google Workspace, add a custom SAML application. Download Google’s IdP metadata.
- Use SpeculaPro’s ACS URL and SP entity ID for the service provider details, and choose email as the NameID format, with the primary email as its value.
- If you want group membership, map it to an attribute and enter that attribute’s name under Groups claim or attribute. Otherwise add people in SpeculaPro and give them roles there, or use a Default role.
- Turn the application on for the people who need SpeculaPro.
- In SpeculaPro, paste the downloaded metadata XML.
Google doesn’t usually send an authentication context that SpeculaPro recognises as multi-factor. Unless you add a value that your setup really sends, people who have a SpeculaPro authenticator enter their code after Google, and Require multi-factor at the IdP would refuse everyone. Enforce 2-step verification in Google Workspace, and keep SpeculaPro’s own two-factor in place.
Keycloak (often self-hosted)
Section titled “Keycloak (often self-hosted)”- In your Keycloak realm, create an OpenID Connect client with client authentication on and the standard (authorization code) flow. Add SpeculaPro’s Redirect URI as a valid redirect URI and the Post-logout redirect URI as a valid post-logout redirect URI.
- In SpeculaPro, enter the realm’s issuer, in the form
https://<keycloak host>/realms/<realm>, the client ID and the client’s secret. - Make sure users have a verified email in Keycloak, or the sign-in is refused with
email_not_verified. - For groups, add a group-membership mapper that puts groups in the ID token, and enter its claim
name. Keycloak can send full group paths such as
/compliance/mlro: map exactly what Test connection shows. - Keycloak’s
acrandamrvalues depend on your authentication flows. Check what a test sign-in sends before adding values to Values that mean multi-factor.
ADFS and other SAML IdPs
Section titled “ADFS and other SAML IdPs”Import SpeculaPro’s SP metadata (or enter the SP entity ID and ACS URL), and give SpeculaPro the IdP’s federation metadata URL. Then check the three settings that most often cause a failed test:
- assertions must be signed, not only the response (
saml_signature_invalid); - the NameID must be persistent or email (
saml_transient_nameid); - the IdP must accept sign-in requests with the HTTP-Redirect binding.
ADFS reports multi-factor with http://schemas.microsoft.com/claims/multipleauthn, which is in the
default list.