Single Sign-On (SSO)
Every ByteHide account can sign in with an email code or with Google, GitHub, Microsoft, GitLab or Bitbucket. Enterprise single sign-on lets the members of your organization sign in to ByteHide with your Microsoft Entra ID tenant instead. You verify the email domains you own, choose whether SSO is optional or required for them, and can let Entra ID create, update and deactivate members for you through SCIM.
Enterprise
Enterprise SSO and SCIM are enabled per organization by ByteHide for Enterprise customers. Until they are, Organization settings → Security shows the notice "Enterprise SSO and SCIM are available on Enterprise", and the connection form and Create token are disabled. Owners can still add and verify domains in advance. Contact sales to enable them.
Open Settings → Organization → Security.
Sign-in Methods
Every ByteHide account, on any plan, can sign in with:
| Method | How |
|---|---|
| Enter your email. ByteHide sends a magic link and a 6-digit code, valid for 15 minutes | |
| Google, GitHub, Microsoft | Buttons under the email field |
| GitLab, Bitbucket | Under More options |
Each account can also have a password, set or changed in Profile → Security → Change Password. In the same place, turn on Authenticator App to add two-factor authentication: signing in with the password then also asks for a code from your authenticator app. Email-code, social and Enterprise SSO sign-ins do not use it; for SSO, your identity provider handles multi-factor authentication.
Enterprise SSO adds sign-in through your organization's own Microsoft Entra ID tenant, for emails under domains you have verified. The Microsoft social button and Enterprise SSO are different: the social button signs in a single account, while Enterprise SSO is set up by your organization's owner, can be required for your domains, and can provision members with SCIM.
Not the same as MCP identity providers
This page covers signing in to the ByteHide console. Protecting an MCP route with your own identity provider (Okta, Entra ID, Auth0) is configured in AI runtime: see MCP Authentication.
Who Can Configure SSO
| Role | Security tab |
|---|---|
| Owner | View and change everything: connection, domains and SCIM tokens |
| Manager | View only. The tab says "Managers can view these settings; only the organization owner can change them." and every control is disabled |
| Member, Billing | No access to the Security tab |
Supported Providers and Protocols
| Item | Supported |
|---|---|
| Identity provider | Microsoft Entra ID (formerly Azure AD), one connection per organization. SAML and other identity providers are not supported |
| Sign-in protocol | OpenID Connect |
| Provisioning | SCIM 2.0, from Entra ID |
| Sign-in flows | Service provider initiated (from the ByteHide sign-in page) and identity provider initiated (from the Entra ID My Apps portal) |
Before You Start
You need:
- An Owner role in the ByteHide organization.
- An administrator in your Entra ID tenant who can create app registrations and enterprise apps.
- Access to the DNS of every email domain your members use.
The setup takes about 20 minutes. The recommended order is: create the Entra app, create the connection in ByteHide, verify your domains, test, and only then require SSO.
Step 1: Register ByteHide in Entra ID
- In Entra ID, open App registrations → New registration.
- Name it, for example
ByteHide. Under Supported account types, choose Accounts in this organizational directory only (single tenant). - Set the redirect URI: platform Web, value taken from the Redirect URI field shown in ByteHide after you create the connection.
- Register the app. From Overview, copy the Application (client) ID and the Directory (tenant) ID.
- Under Certificates & secrets, create a New client secret and copy its Value. Entra shows it once. Note the expiry date.
- Under Token configuration, add the optional ID token claims
email,given_nameandfamily_name. - Under API permissions, make sure
openid,profileandemail(delegated) are granted, and grant admin consent. - Recommended: in Enterprise apps → ByteHide → Properties, set Assignment required to Yes, then assign the users and groups who should sign in.
Step 2: Create the Connection
The Single sign-on (Microsoft Entra ID) card holds the connection.
| Field | Description |
|---|---|
| Directory (tenant) ID | Your Entra tenant ID. Required |
| Application (client) ID | The app registration's client ID. Required |
| Client secret | The secret value from Entra. Required when you create the connection. On later saves, leave it blank to keep the current one |
| Default role for new members | Role given to people created on first sign-in or by SCIM without a role: Member, Manager or Billing. Owner cannot be a default |
| Create accounts on first sign-in (JIT) | When on, a person from a verified domain who is not yet a member becomes one on their first SSO sign-in. When off, only existing members and SCIM-provisioned people can sign in. On by default |
| Connection enabled | Turns the connection on or off without deleting it |
| Route verified domains to Microsoft at sign-in | When on, people who type an email under a verified domain on the sign-in page are offered your identity provider. On by default |
| Require SSO for verified domains | Blocks every other sign-in method for verified domains. Needs routing on. See Require SSO |
Click Create connection. The card then shows two read-only values to copy into Entra ID:
- Redirect URI: must match the redirect URI of the app registration exactly.
- Sign-in URL (for the Entra app "Home page URL"): paste it into Branding & properties → Home page URL of the Entra app so people can start from the Entra My Apps portal.
The status chip next to the title shows active or disabled.
Rotate the Client Secret
Create a new secret in Entra, paste it into Client secret, click Save changes, then delete the old secret in Entra. Do this before the old secret expires: sign-in fails once it does.
Step 3: Verify Your Domains
Only email addresses under a verified domain can sign in through SSO or be managed by SCIM. Verify every domain your members use.
- In the Verified domains card, type the domain (for example
example.com) and click Add domain. - Publish the DNS record shown in the DNS TXT record column:
| Type | Host | Value |
|---|---|---|
TXT | _bytehide-verification.<your-domain> | bytehide-domain-verification=… (copy it from the console) |
- Click the refresh icon (Check DNS now). DNS changes usually propagate in minutes and can take up to an hour. Until then the check returns "TXT record not found yet".
A domain can belong to only one ByteHide organization. Adding a domain another organization already claimed fails with "This domain is already claimed."
Domain Status
| Chip | Meaning |
|---|---|
pending | The TXT record has not been found yet |
verified | Ownership is proven |
| Tenant matches | Microsoft reports that your connection's Entra tenant owns the domain |
| Owned by tenant … | Microsoft reports a different Entra tenant owns the domain |
| Not an Entra domain | The domain is not registered in any Entra tenant |
| Tenant not checked | ByteHide has not received an answer from Microsoft yet |
Removing a domain asks you to type the domain name to confirm. Members under it are no longer routed to your identity provider, and Entra ID can no longer manage them.
Step 4: Test
- Open a private browser window and go to the ByteHide sign-in page.
- Enter an email under a verified domain.
- Choose your organization's sign-in button, sign in with Microsoft, and check you land in the console.
Ask a few members to sign in once this way before you require SSO.
Require SSO
Turn on Require SSO for verified domains and click Save changes. From then on:
- Email-code, password and social sign-in (Google, GitHub, Microsoft, GitLab, Bitbucket) are refused for every email under your verified domains.
- Owners keep a break-glass login. Active owners of the organization are exempt: they can still sign in with an email code (the sign-in page offers a link for it) or a social login, so a broken connection never locks you out.
- Members whose email is not under a verified domain, such as contractors on a personal address, are not affected.
Every domain must belong to your tenant
ByteHide refuses to require SSO while any verified domain is owned by another Entra tenant or is not an Entra domain: those accounts could not sign in at all. The error names the domains. Fix the tenant or remove the domain, then save again. ByteHide checks each domain with Microsoft every time you save; a domain still marked Tenant not checked does not block saving.
Turning Route verified domains to Microsoft at sign-in off also turns Require SSO off. Members then sign in as usual and can still use SSO through the sign-in URL.
How Members Sign In
The sign-in page asks for an email first and decides what to show:
| Situation | What the person sees |
|---|---|
| SSO required for the email | A Sign in with {organization} screen saying the organization requires signing in with Microsoft, a Sign in with Microsoft button, and for owners an Owner of {organization}? Use an email code link |
| Routed domain, no ByteHide account yet | The same screen with Continue with an email code instead as an alternative |
| Routed domain, existing account, SSO not required | The usual email-code step, with a Continue with {organization} SSO button |
| No SSO for the domain | The usual sign-in |
People who look for SSO directly can click Sign in with SSO under the sign-in options, enter their Work email and click Continue. If no connection exists for that domain, the page says "No single sign-on is configured for {domain}" and offers an email code.
If someone tries another method after SSO became required, ByteHide refuses it and takes them back to this screen with the notice "{organization} requires single sign-on. Use Microsoft to sign in."
Identity Matching and Sessions
- People are identified by their Entra object ID, not their email. Renaming a user in Entra keeps their ByteHide account.
- On first SSO sign-in, an existing ByteHide account with the same email is linked to the Entra identity, but only if the email is under one of your verified domains.
- Multi-factor authentication is handled by your tenant (for example with Conditional Access). ByteHide does not add its own two-factor step to SSO sign-ins.
- SSO sessions last 24 hours. After that, people sign in through Entra again.
Automatic Provisioning (SCIM 2.0)
With SCIM, Entra ID creates, updates and deactivates members and syncs Entra groups to ByteHide teams. SCIM needs at least one verified domain. Set up the SSO connection first so provisioned members can sign in and get the connection's default role (without a connection they get Member).
Create a SCIM Token
- In the Automatic provisioning (SCIM 2.0) card, click Create token.
- Give it a Name and click Create token.
- Copy the token. It is shown once. Confirm I have copied my token and stored it securely and click Done.
Copy the Tenant URL (paste into Entra ID → Provisioning) from the same card.
The token list shows each token's name, prefix, Last used and Created dates. Revoke a token with the trash icon; you type the token name to confirm and Entra stops syncing with it immediately.
Configure Entra ID
- In Enterprise apps → ByteHide → Provisioning, create a configuration with the Tenant URL and the token as Secret Token, then Test Connection.
- Keep these user attribute mappings and remove the rest:
| Entra attribute | ByteHide (SCIM) attribute |
|---|---|
userPrincipalName (or mail) | userName (matching, precedence 1) |
objectId | externalId (matching, precedence 2) |
Switch([IsSoftDeleted], , "False", "True", "True", "False") | active |
givenName | name.givenName |
surname | name.familyName |
displayName | displayName |
- For groups, map
displayName(matching),objectIdtoexternalId, andmembers. - Set the scope to Sync only assigned users and groups, assign them, and Start provisioning.
userName must be an email under a verified domain. Any other value is rejected. If your user principal names are not real email addresses, map mail instead.
Roles From Entra (Optional)
To set ByteHide roles from Entra, create app roles on the app registration whose values are exactly member, manager, billing or owner, assign users to them directly (not through groups), and add the mapping SingleAppRoleAssignment([appRoleAssignments]) → roles[primary eq "True"].value. People without an app role get the connection's default role.
What Provisioning Does
| In Entra ID | In ByteHide |
|---|---|
| Assign a user | Member created, or existing account linked, with the default role and marked Directory |
| Update name or email | Profile updated. The email must stay within your verified domains |
| Unassign, disable or soft-delete a user | Membership suspended. The person's sessions and API tokens are revoked and they are signed out of ByteHide |
| Hard delete | Membership removed. The person's ByteHide account is kept for their other organizations |
| Assign a group | Team created |
| Change group membership | Team membership updated |
ByteHide always keeps at least one active owner: Entra cannot remove, deactivate or demote the last one.
Directory-Managed Members
Members created or adopted by SCIM show a Directory chip in Teams & Members. While at least one SCIM token is active, their role, status and membership can only be changed in Entra ID; the console disables those controls. Revoking every SCIM token makes them editable from the console again.
Existing Members
- Setting up SSO does not remove anyone. Memberships, roles and teams stay as they are.
- Existing members under a verified domain can keep signing in with an email code until you require SSO. On their first SSO sign-in their account is linked to Entra.
- Members outside your verified domains (for example a personal email) cannot use SSO and are not affected by Require SSO or SCIM. Invite them as usual.
- With SCIM on, an existing member under a verified domain that Entra provisions is adopted and becomes Directory-managed.
Remove the Connection
Click Remove connection and type remove to confirm. Single sign-on is disabled for the organization and every member's SSO identity link is deleted. Memberships are kept, and members sign in with the other methods again.
Troubleshooting
| Message | Cause | Fix |
|---|---|---|
| "id_token issuer does not match the configured tenant" | Wrong tenant ID, or a user from another tenant on a multi-tenant app | Check the tenant ID and make the app single tenant |
| "id_token audience does not match the configured client" | Wrong client ID | Copy the Application (client) ID again |
| "Your identity provider did not supply an email address." | The ID token has no email claim and preferred_username is not an email address | Add the optional email claim |
| "The email domain … is not verified for this organization." | The person's email is under an unverified domain | Add and verify that domain |
| "Your account has not been provisioned. Contact your administrator." | JIT is off and the person was not provisioned | Turn on JIT or assign them through SCIM |
| "You are not a member of this organization. Contact your administrator." | JIT is off and the account exists but is not a member | Turn on JIT, invite them, or provision them through SCIM |
| "Your access to this organization is suspended." | The membership was deactivated in Entra or the console | Reactivate it |
| "Login attempt could not be verified. Please try again." | The browser blocked the short-lived cookie set at the start of sign-in | Allow cookies for the ByteHide sign-in page and retry |
AADSTS50011 redirect URI mismatch | The redirect URI in Entra does not match | Copy the Redirect URI from the console exactly |
| SCIM Test Connection fails with 401 | The token is wrong or revoked | Create a new token and paste it again |
Next Steps
Members and Teams
Roles, invitations and teams
Organizations
Organization settings, ownership and billing scope
Projects
Create projects and control who can see them