SAML Single Sign-On
SAML Single Sign-On lets your team log into Mittr using the same account they use for the rest of your company’s tools. You configure it once in your Identity Provider (IdP: Okta, Azure AD, Google Workspace, OneLogin, Auth0, etc.), and every employee in the designated group gets access without ever creating a Mittr password.
Mittr supports SP-initiated (user clicks “Continue with your IdP” on the Mittr login page) and IdP-initiated (user launches Mittr from their IdP’s app dashboard) flows out of the box.
Prerequisites
Section titled “Prerequisites”- Scale plan or above. SAML SSO is gated on the Scale plan; the Settings tab surfaces a 503 hint if your plan doesn’t include it.
- Admin access in Mittr and in your IdP. In Mittr this means the
adminrole on your workspace. - A verified email domain you want to gate access with (optional but recommended: see Email-domain discovery).
Quick overview
Section titled “Quick overview”Setting up SAML is a two-side handshake:
- Mittr side: create a new SAML connection. Mittr generates a fresh signing keypair and a set of URLs specific to your workspace.
- IdP side: create a new SAML 2.0 application using the URLs and the public certificate Mittr gave you.
- Back to Mittr: paste your IdP’s metadata (URL or XML) into the Mittr connection so it can verify assertions signed by your IdP.
- Test: click the Login URL. If everything is wired up you land on the dashboard logged in as a real user.
The rest of this guide walks through each step in detail, with vendor-specific notes for Okta, Azure AD, and Google Workspace.
Step 1: Create the Mittr SAML connection
Section titled “Step 1: Create the Mittr SAML connection”- Sign into your Mittr workspace.
- Open Settings → SSO (the tab has a lock icon).
- Click New SAML connection.
- Fill in:
- Connection name: any label you like (
Okta Production,Azure AD: Staging). Shown only to admins. - Slug: URL-safe identifier (
okta-prod,azure-staging). Becomes part of your SAML callback URL. Cannot be changed later without re-registering in your IdP. - Default role: what newly-provisioned users get when the
IdP doesn’t specify a group.
vieweris the safe default. - IdP metadata: you’ll fill this in after Step 2.
- Connection name: any label you like (
- Save. Mittr generates the SP keypair and opens a Register these
in your IdP panel with four values:
SP Metadata URLACS URL(Reply URL)SP Entity ID(Audience)Login URL(for SP-initiated flows: this is what you’ll eventually put behind your Mittr login link)
Keep this panel open: you’ll copy from it in Step 2.
Step 2: Create the IdP application
Section titled “Step 2: Create the IdP application”Pick your IdP below. The field names differ slightly by vendor but the four values are universal.
-
In Okta, go to Applications → Create App Integration.
-
Pick SAML 2.0 and click Next.
-
On the General Settings step, pick a name and logo (shown to your users on the Okta dashboard).
-
On the Configure SAML step, set these values (copy from the Mittr Register these in your IdP panel):
Okta field Paste from Mittr Single sign-on URL ACS URLAudience URI (SP Entity ID) SP Entity IDName ID format EmailAddressApplication username Email -
Under Attribute Statements, add at least three mappings:
Name Value emailuser.emailfirstNameuser.firstNamelastNameuser.lastName -
Under Group Attribute Statements (optional but recommended for role mapping), add
groupswith filterMatches regex .*. -
Finish the wizard. In the app’s Sign On tab, click View SAML setup instructions to get your Identity Provider metadata URL; that’s what you’ll paste into Mittr in Step 3.
-
Under the app’s Assignments tab, add the users or groups that should have Mittr access.
Azure AD (Microsoft Entra ID)
Section titled “Azure AD (Microsoft Entra ID)”-
Go to Enterprise applications → New application → Create your own application.
-
Pick Integrate any other application you don’t find in the gallery (Non-gallery). Give it a name.
-
Open Single sign-on → SAML.
-
Click Edit on Basic SAML Configuration and paste:
Azure AD field Paste from Mittr Identifier (Entity ID) SP Entity IDReply URL (Assertion Consumer Service) ACS URLSign on URL (SP-initiated only) Login URL -
Under User Attributes & Claims, verify the defaults include
emailaddress,givenname, andsurname. -
Under SAML Certificates, copy the App Federation Metadata URL. That’s what you’ll paste into Mittr.
-
Under Users and groups, assign the group that should access Mittr.
Google Workspace
Section titled “Google Workspace”-
In the Google Admin console, go to Apps → Web and mobile apps → Add app → Add custom SAML app.
-
Pick a name, upload an icon, click Continue.
-
On the Google Identity Provider details page, download the IdP metadata XML. You’ll paste this into Mittr in Step 3; Google doesn’t expose a public URL for it.
-
On the Service provider details page, paste:
Google field Paste from Mittr ACS URL ACS URLEntity ID SP Entity IDName ID format EMAIL -
Under Attribute mapping:
Google directory field Mittr attribute name Primary email emailFirst name firstNameLast name lastName -
Finish. On the app page click User access and turn the service On for everyone (or for a specific org unit).
Other IdPs
Section titled “Other IdPs”Any SAML 2.0-conformant IdP works. The four universal fields map straight across:
| Standard SAML term | Mittr dashboard label |
|---|---|
| Assertion Consumer URL | ACS URL |
| Audience / Entity ID | SP Entity ID |
| Sign-on URL (SP-initiated) | Login URL |
| Metadata URL (SP) | SP Metadata URL |
Mittr accepts any NameID format that carries an email address. It
requires email in the assertion; without it the ACS rejects the
login as SAML_MISSING_EMAIL.
Step 3: Paste IdP metadata back into Mittr
Section titled “Step 3: Paste IdP metadata back into Mittr”Return to the Mittr SSO connection you opened in Step 1. Fill in the IdP metadata field with whichever form your IdP gave you:
- Metadata URL (preferred, when available): Mittr will refetch with TTL caching so cert rotations at your IdP are picked up automatically.
- Metadata XML: paste the raw XML blob. You’ll need to re-paste on cert rotation.
Hit Save. Mittr probes the metadata, extracts the IdP entity ID, and the connection flips to Active.
Step 4: Test
Section titled “Step 4: Test”From an incognito window:
- Go to
yourdomain.com/login. - Enter your work email (e.g.
[email protected]). If you configured email-domain discovery, a Continue with <IdP> button appears; click it. - Without discovery, paste the Login URL from the Mittr SSO panel directly into your browser.
- You’re redirected to your IdP. Authenticate as usual.
- The IdP redirects you back to
yourdomain.com/auth/sso/saml/…/acs. - Mittr verifies the signed assertion, creates a session cookie, and lands you on the dashboard.
First-time users are JIT-provisioned at the connection’s default role (or a mapped role if you configured role mapping).
Role mapping
Section titled “Role mapping”Drive Mittr roles from IdP group membership:
-
In your IdP, make sure the SAML app pushes a
groupsattribute (Okta: Group Attribute Statement; Azure AD: User Attributes & Claims → Group Claims; Google: configure via directory API). -
In Mittr’s connection editor, open Role mapping and add the IdP group names that should promote members to admin or editor. Example mapping:
engineeringbecomeseditoradminsbecomesadminread-onlybecomesviewer
-
On login, Mittr scans the assertion’s groups in order; the first match wins. Unmapped users fall back to the connection’s Default role.
Group priority is admin over editor over viewer. If a user is
in multiple mapped groups, the highest-privilege role applies.
Email-domain discovery
Section titled “Email-domain discovery”Instead of asking users to hunt for the “Continue with Okta” button, you can map your email domain to your tenant so the login page auto-offers SSO when the user types a recognised email.
- In Mittr, go to Settings → SSO → Email domains.
- Add your domain (
acme.com). Mittr normalises it (@stripped, lowercase, no trailing slash). - On the login page, when a user types an email whose domain matches, a Continue with <IdP name> button appears.
Notes:
- Domains are globally unique. If another tenant has claimed
acme.com, you’ll get a 409; contact support to resolve. - The
/auth/sso/discoverendpoint returns 404 for unknown domains (no enumeration leak: attackers can’t find out which tenants exist by guessing emails).
Pre-inviting users (keeping admin-assigned roles)
Section titled “Pre-inviting users (keeping admin-assigned roles)”By default, SAML JIT creates users at the connection’s default role. If you want specific users at specific roles before they’ve logged in even once:
- Go to Settings → Team → Invite member.
- Enter their email and pick their Mittr role.
- Send the invite (or skip the invite email: the row exists either way).
When that user eventually signs in via SAML with the same email, the
invite-consumption path kicks in: Mittr flips their status from
invited to active, attaches the SSO identity to the existing row,
and preserves the role you chose. The default role is not
applied.
Rotating SP keys
Section titled “Rotating SP keys”The SP (Mittr side) cert + private key live encrypted at rest. You can rotate them from the connection editor:
- Open the connection.
- Click Rotate SP key. Confirm.
- Copy the new SP Metadata URL / Entity ID / cert and update your IdP’s SAML app.
Until you update the IdP, it will still be signing responses against the old cert and assertions will fail. Plan rotations during a low- traffic window.
Troubleshooting
Section titled “Troubleshooting”SAML_MISSING_EMAIL
Section titled “SAML_MISSING_EMAIL”Your IdP isn’t including an email in the assertion. In Okta, check
Attribute Statements → email. In Azure AD, check User
Attributes & Claims → emailaddress. In Google, verify the NameID
format is EMAIL.
SAML_NOT_FOUND: “Workspace not found”
Section titled “SAML_NOT_FOUND: “Workspace not found””The first path segment in the URL (/auth/sso/saml/<here>/…) doesn’t
match any clients.slug. Check:
- You copied the URL from the current Register these in your IdP panel (if you renamed your workspace slug after registering with your IdP, the old URL still works: Mittr accepts either slug or UUID: but double-check the connection name matches).
- The workspace isn’t deleted.
SAML_INACTIVE: 410 Gone
Section titled “SAML_INACTIVE: 410 Gone”The connection has been deactivated. Re-enable it in
Settings → SSO (toggle the Active switch on the row).
Assertion signature invalid
Section titled “Assertion signature invalid”The IdP’s cert in the metadata doesn’t match the cert the assertion was signed with. Most common cause: you rotated the cert at the IdP but Mittr is still caching the old metadata. If you used a Metadata URL, wait for the TTL to expire (~15 minutes) or click Refresh metadata in the connection editor. If you pasted XML, paste the new XML from your IdP.
”Replay detected”: SAML_REPLAY
Section titled “”Replay detected”: SAML_REPLAY”Mittr stores every consumed assertion ID and rejects re-use. This usually means: the user clicked Back and re-POSTed the same SAMLResponse from their browser history. Ask them to start a fresh login flow.
SAML_WRONG_ISSUER
Section titled “SAML_WRONG_ISSUER”The Issuer in the SAMLResponse doesn’t match the IdP entity ID we
cached when you pasted the metadata. Can happen if your IdP renamed
their entity ID. Re-paste their metadata into the connection.
Login succeeds but lands back at /login
Section titled “Login succeeds but lands back at /login”The session cookie wasn’t set or wasn’t sent to /auth/session on
the dashboard hydration fetch. Check:
- Your deployment is behind HTTPS in production (
Securecookie flag requires TLS). - No reverse proxy is stripping
Set-Cookie. - Browser cookie policy isn’t blocking third-party cookies for your domain.
Next steps
Section titled “Next steps”- Automate user lifecycle: pair SAML with SCIM v2 provisioning so HR-driven adds and removes flow into Mittr without manual invites.
- Restrict by IP: pair SAML auth with IP whitelisting to require that logins come from your office network.