Single Sign-On (SSO)
Connect an OIDC or SAML identity provider so members sign in through your company IdP.
Single Sign-On (SSO) lets members of your workspace sign in with your company identity provider — Okta, Entra ID, Google Workspace, OneLogin, JumpCloud, or any IdP that speaks OIDC or SAML 2.0.
SSO is a Teams plan feature. Configuration lives in Settings → Workspace → Security. Only a workspace Owner can add, change, or remove a provider; Admins see the same panel read-only.
One provider per email domain
A provider is bound to an email domain (acme.com). Members whose email is on that domain — or a subdomain of it — sign in through it. A domain can only be verified by one workspace.
Set up your provider
Pick your identity provider for a step-by-step walkthrough. Every path ends at the same place: a verified domain and a live provider.
Microsoft Entra ID
SAML 2.0 with a non-gallery enterprise application.
Google Workspace
SAML 2.0 with a custom SAML app.
Okta
SAML 2.0 or OIDC.
Any SAML provider
OneLogin, JumpCloud, Ping, ADFS, or anything else.
Any OIDC provider
Auth0, Keycloak, or any OpenID Connect IdP.
What Fuser reads from your IdP
This is the contract between your IdP and Fuser. Getting it wrong is the single most common cause of a broken connection, so configure it deliberately rather than trusting your IdP's defaults.
SAML attributes
Attribute names are matched exactly and without a namespace. An attribute sent as http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress does not match email.
| Fuser uses | Attribute name | Required |
|---|---|---|
email | Yes | |
| First name | givenName | No |
| Last name | surname | No |
| Display name | displayName | No |
displayName is read only when both givenName and surname are absent.
Always send an `email` attribute
If no email attribute is present, Fuser falls back to the assertion's NameID and treats it as the member's email address. That works while your NameID happens to be an email address, and breaks the moment it isn't.
The NameID identifies the account
Sending email does not make the NameID unimportant. The NameID is the identifier Fuser stores for the account, and on every sign-in after the first it is what resolves the member — the address in the assertion is not re-checked at that point.
Two properties follow, and your IdP has to guarantee both:
- Unique per person. Two members must never present the same NameID. A collision signs the second member in as the first, and because Fuser accounts are not scoped to one workspace, that reaches everywhere the first member has access.
- Stable for a person. A member whose NameID changes is treated as a new identity for your provider. They are re-attached by email address on the next sign-in, so a stable, non-reassignable identifier — a directory GUID rather than a mail address or a login name — is the safer choice.
Never use the SAML transient NameID format, which issues a fresh value on every sign-in.
Your IdP is trusted for accounts already linked to it
Fuser checks that an address falls inside the verified domain when it first creates a member's account. A later sign-in that resolves to an existing account through its NameID does not repeat that check. In other words, a provider is authoritative for the people who already signed in through it — which is the normal SSO trust model, and the reason NameID assignment in your directory is a security decision, not a formatting one.
OIDC claims
Fuser requests the openid, email, profile, and offline_access scopes and reads the standard claims.
| Fuser uses | Claim |
|---|---|
| Account ID | sub |
email | |
| Name | name |
| Avatar | picture |
What Fuser ignores
email_verified/ equivalent SAML attributes. Fuser does not treat your IdP's verification claim as authority. A member's email is marked verified because the provider's domain passed DNS verification and their address is inside it — a stronger signal than a claim.- Roles, groups, and entitlements. Everyone who signs in through SSO joins with the Member role. Promote people in Members.
The domain boundary
When Fuser creates a member's account, the address in the assertion must be inside the provider's verified domain or one of its subdomains. An identity outside that domain is rejected rather than silently creating an account — this is what stops a provider from claiming identities it does not own.
Members on another company's domain cannot join through SSO
Anyone whose asserted address belongs to a different domain — a directory guest, a contractor signing in with their own employer's address — is outside the boundary, and no attribute configuration changes that. What matters is the address your IdP sends, not the account's status in your directory: a guest given a mailbox on your verified domain works normally.
For everyone else, give them an account on your verified domain, or invite them to Fuser by email and let them sign in with a code.
Before you start
You need admin access to your identity provider, and the ability to add a DNS TXT record for your domain. Both ends have to exist before sign-in works:
- An application in your IdP that Fuser can authenticate against.
- A provider in Fuser holding that application's credentials.
- A DNS TXT record proving you own the email domain.
The IdP application and the Fuser provider reference each other, so you will go back and forth once: create the app in your IdP with placeholder URLs, register it in Fuser, then paste Fuser's real endpoint URLs back into the IdP.
Registering the provider in Fuser
Every provider guide passes through this form. Open Settings → Workspace → Security → Single Sign-On, pick OIDC or SAML, and fill it in:
| Field | Protocol | What to enter |
|---|---|---|
| Email domain | Both | The bare domain, e.g. acme.com. No https://, no @. |
| Issuer | OIDC | Your IdP's issuer URL. Must be a public HTTPS URL — Fuser reads its discovery document. |
| Issuer | SAML | The IdP's entity ID from its metadata. It looks like a URL but is only an identifier. |
| Client ID | OIDC | From the application you created. |
| Client secret | OIDC | From the application you created. |
| Sign-on URL | SAML | The IdP's SingleSignOnService URL. Must be HTTPS. |
| Signing certificate | SAML | The IdP's X.509 certificate in PEM form, including the BEGIN and END lines. |
Click Add provider.
Provider settings are final
A registered provider cannot be edited. There is no way to correct an issuer, a sign-on URL, a certificate, or a client secret in place — the only path is Remove and register again.
That is not a like-for-like swap. Each registration mints a fresh internal identifier, and Fuser derives three things from it:
- the ACS URL,
- the Entity ID / Audience URI,
- the DNS TXT record name.
So re-registering gives you new endpoint URLs and a new record. Whatever you already pasted into your IdP is stale, the TXT record you already published no longer matches, and the domain has to be verified again.
Get the IdP's values before you register
Where your IdP demands Fuser's URLs before it will save — Okta's SAML wizard does — put the placeholder on the IdP side and correct it afterwards. IdP applications are editable; a Fuser provider is not.
Client secrets are additionally write-only: Fuser never displays a saved secret again, even to an owner.
The new provider card then lists the URLs your IdP needs. Copy each one into the matching field in your IdP application.
OIDC
| Fuser shows | Your IdP calls it |
|---|---|
| Redirect URI | Redirect URI, sign-in redirect URI, or callback URL |
SAML
| Fuser shows | Your IdP calls it |
|---|---|
| Entity ID / Audience URI | Audience URI, SP entity ID, or SP identifier |
| ACS URL | Assertion Consumer Service URL, or reply URL |
| SP metadata | An importable metadata URL, if your IdP supports importing |
While the domain is unverified the card keeps these fields open, since wiring the IdP up is the only thing left to do. Once it verifies they collapse — reopen them any time with Show details on the card.
Members must start from Fuser
Fuser only accepts assertions your IdP initiates from a Fuser sign-in. IdP-initiated sign-in — launching Fuser from the app tile on your Okta dashboard, Google app launcher, or Microsoft My Apps portal — is not supported. Point members at the Fuser sign-in page instead.
Verifying the domain with DNS
Until the domain is verified, the provider is inert — nobody can sign in through it. The card shows a TXT record to add at your DNS provider:
- Queried hostname — the full hostname Fuser looks up, e.g.
_fuser-sso-acme-com-a1b2c3.acme.com. Many DNS consoles append your domain automatically; if yours does, enter only the leading label. - Record value — copy it exactly.
Fuser rechecks the record on its own every 20 seconds for about five minutes, and you can hit Check now at any time. DNS propagation usually takes a few minutes but can take longer.
The record expires after a week. If it lapses before verification completes, use Get a new record to issue a fresh one.
Once the record is found, the card flips to Verified — SSO active and members on that domain can sign in through your IdP.
Requiring SSO
By default, a verified provider is an option — members can still sign in with email or Google. The Require SSO toggle on the panel makes it mandatory: every member whose email is on a verified SSO domain must go through your IdP.
- The toggle only becomes available once a domain is verified. Enforcing before then would lock everyone out.
- Workspace owners always keep email sign-in. If your IdP goes down or is misconfigured, an owner can still get in and turn enforcement off.
- Enforcement matches subdomains too. If you verify
acme.com, a member ateng.acme.comis covered — unless a more specific provider foreng.acme.comexists, in which case that one wins.
What members see
The sign-in screen always offers a Use single sign-on (SSO) link under the email field. A member can take it directly, or enter their email as usual — Fuser then looks up the domain and adapts:
- No SSO for that domain — the normal email code and Continue with Google options. Taking the SSO link says no provider is set up for that domain.
- SSO available, not required — the code screen also shows a Continue with SSO button.
- SSO required — the email code and Google options disappear and the only path is Continue with SSO, with a note that their team requires it.
Clicking through redirects to your IdP and back. A member signing in through a verified provider for the first time joins the workspace automatically with the Member role. Roles are never taken from IdP attributes — promote people in Members as usual.
SSO sign-ins consume seats
Joining through SSO uses a workspace seat like any other member. If the workspace is at its seat limit, the sign-in is rejected with a member-limit message — someone already invited or already a member is unaffected. Add seats in Workspace Billing.
Removing a provider
Remove on the provider card deletes it. Members who signed in through it keep their accounts and workspace membership, and fall back to email sign-in — unless Require SSO is still on and another verified provider covers their domain.
If your workspace drops off the Teams plan, existing SSO configuration stays visible and enforcement keeps running. The panel keeps the Disable and Remove controls available so you are never stuck with members locked behind a provider you can no longer manage.