Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.
This page documents workspace-level SSO for your team’s access to Lovable itself. It is configured at the workspace level under Identity (Workspace settings → Access → Identity).Looking for SAML SSO for the end users of your app? See Add SAML single sign-on to your app. Want apps you build to recognize logged-in workspace members without a login page? See Reuse Lovable workspace identity in your app. Both are different features.
Single sign-on (SSO) is available on Business and Enterprise plans and enables secure, centralized authentication across your company. With SSO, users can access Lovable with one set of credentials, simplifying access management and improving security.
Service provider (SP)-initiated login is supported for all providers: users start login from Lovable.Identity provider (IdP)-initiated SSO (starting from an IdP dashboard tile) can optionally be enabled for SAML providers. See Set up IdP-initiated login (SAML). OIDC providers support SP-initiated login only.
If your workspace belongs to an organization, an org admin can set up SSO once for every workspace. See Set up SSO for the organization. If the workspace is Managed by the organization, its Identity tab shows that the organization manages these settings.
Lovable supports both OIDC and SAML 2.0 protocols, enabling integration with all major identity providers (IdP) including Okta, Auth0, Microsoft Entra ID (Azure AD), and more.
OpenID Connect (OIDC): recommended. A modern identity layer built on OAuth 2.0 that verifies who is logging in.
SAML (Security Assertion Markup Language) 2.0: XML-based protocol for exchanging authentication and authorization data, widely used in enterprise environments.
To connect your identity provider to Lovable using OIDC or SAML, you need:
Admin access to your identity provider
Workspace owner or admin role in Lovable
A verified domain in Lovable, to prove domain ownership
To verify your domain, add the TXT record displayed in the UI to your DNS provider. See Verify a domain for your workspace for the full walkthrough, including record details and troubleshooting.
SSO configuration is a two-way setup between Lovable and your identity provider:
Lovable → IdP: copy Lovable URLs and settings into your IdP app.
IdP → Lovable: copy your IdP’s issuer, metadata, and certificates back into Lovable.
The workspace owner or admin can set up SSO. To start, go to Identity (Workspace settings → Access → Identity) and click Add provider in the SSO providers section. On the Choose SSO Protocol screen, click Configure OIDC or Configure SAML.
Add provider stays disabled until your workspace has a verified domain and shows Add a verified domain first. Add one in the Verified domains section, then start SSO setup.
The setup then runs in three stages:
Preparation. Lovable shows what to configure in your IdP, such as the app type, scopes, and attribute mappings, and the Lovable URLs to copy into your IdP. The values are listed in the reference below.
Configuration. You enter your IdP’s issuer and client credentials or certificates, a display name, and the verified domain your login URL is based on. The provider guides below list the exact fields.
Test and confirm. For OIDC, Test configuration checks your values before you continue. Both protocols end on a confirmation page where you click Confirm & enable SSO.
Use these values while configuring OIDC or SAML in your IdP. Lovable shows the same values on the preparation screens, with copy buttons on the URLs.
OIDC
SAML
Application type: Web Application or Server-side Application
Grant type: Authorization Code
Token method: POST (if configurable)
Redirect URI to copy and add to your IdP: https://auth.lovable.dev/__/auth/handler
OAuth scopes:
Required: openid, email
Recommended: profile
Optional claims: department, title, division, manager, for the member’s department, job title, division, and manager’s display name. Lovable also accepts departmentName, jobTitle, managerDisplayName, and managerName. Claim names are case-sensitive. Lovable shows the department in Insights.
displayName (recommended): map to user’s full name
photoURL (recommended): map to user’s profile picture URL
department, title, division, manager (optional): map to the member’s department, job title, division, and manager’s display name. Lovable also accepts departmentName, jobTitle, managerDisplayName, and managerName. Attribute names are case-sensitive. Lovable shows the department in Insights.
Email is not a separate attribute. Lovable reads it from the Name ID, so the Name ID source must be the user’s email address, not a login identifier.
Each provider gets a login URL that members can use to log in with SSO directly: https://lovable.dev/sso-login/{tenantId}. The {tenantId} part is your verified domain with dots replaced by hyphens, for example acme-com for acme.com. If you enter a Login URL suffix during setup, Lovable appends it, for example acme-com-engineering. Login identifiers are unique across Lovable, so a second workspace on the same domain needs a suffix. After setup, the URL appears in the SSO providers row and in the provider’s Login URL field, each with a copy button.
Enforce SSO requires an active SSO session to use the workspace. Members who log in another way are asked to log in through your provider before they can access it. The toggle in Identity (Workspace settings → Access → Identity) becomes available when your workspace has a verified domain and an SSO provider. Test an SSO login before you enable it: for six hours after you add a provider, the toggle stays disabled and shows Wait 6 hours and test SSO login before enforcing SSO.When you enable the toggle, Lovable opens the Enable enforce SSO dialog:
Keep Remove all external collaborators selected and click Enable and remove to remove external collaborators from every project in the workspace.
While SSO is enforced, invite links only work for people whose email is on one of your verified domains. Use Session duration to choose how long members stay logged in before Lovable requires a new SSO login: 8 hours, 24 hours, 48 hours, or 7 days.
Enforce SSO and Require two-factor authentication are mutually exclusive. When you enable Enforce SSO, Lovable automatically disables Require two-factor authentication. Under enforced SSO, your identity provider is responsible for multi-factor authentication.
If you use Okta, Auth0, or Microsoft Entra, you can find provider-specific documentation for setting up SSO. If you use another provider, see Configure other providers.Before you begin, complete Start SSO setup in Lovable to get the settings and values you need to use in your IdP.For more information, refer to your IdP’s official documentation.
To find your issuer, click the OpenID Provider Metadata link on the Sign On tab. The issuer is your Okta domain, for example https://your-org.okta.com.
Okta Client ID → Lovable OAuth Client ID / Application ID
Okta Client Secret → Lovable OAuth Client Secret
Optionally, the date the client secret expires → Lovable Client secret expiration (optional)
3
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
4
Test the configuration in Lovable
In Lovable, click Test configuration. Lovable checks the issuer, client ID, and client secret and shows the outcome on the Test results screen. Fix anything it reports, then click Configure provider.
5
Finish OIDC provider configuration in Lovable
In Lovable, review the confirmation page, then click Confirm & enable SSO to finish the configuration of Okta as your OIDC SSO provider.
1
Add the Lovable app in Okta
In the Okta Admin Console, go to Applications → Browse App Catalog.
Search for Lovable, then click Add Integration.
On the General Settings screen, set the Application label (for example, Lovable SAML), then click Next.
On the Sign-On Options screen, select SAML 2.0.
Set Application username format to Email.
Click Done.
The SAML settings (ACS URL and Audience URI) are pre-configured by the Lovable integration. You do not need to enter any SAML values manually in Okta.Because these settings cannot be changed, the catalog app does not support IdP-initiated login yet. For now, users logging in through Okta must start login from Lovable.
2
Provide Lovable with your IdP information
In Lovable, choose between quick SAML provider setup or manual configuration:Option 1: Quick setup - import from metadata URL
In Okta, open the Sign On tab of the Lovable application, scroll to Metadata details, and copy the Metadata URL.
In Lovable, paste the metadata URL in Quick setup: import from metadata URL field.
Click Test & import to automatically populate the required fields below.
Option 2: Manual configurationOpen the metadata URL in a new tab. Copy the following values and enter them in Lovable.
Paste the certificate value between the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines.
3
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
4
Finish SAML provider configuration in Lovable
In Lovable, click Configure SAML provider, review the confirmation page, then click Confirm & enable SSO to finish the configuration of Okta as your SAML SSO provider.
Auth0 Client ID → Lovable OAuth Client ID / Application ID
Auth0 Client Secret → Lovable OAuth Client Secret
Optionally, the date the client secret expires → Lovable Client secret expiration (optional)
4
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
5
Test the configuration in Lovable
In Lovable, click Test configuration. Lovable checks the issuer, client ID, and client secret and shows the outcome on the Test results screen. Fix anything it reports, then click Configure provider.
6
Finish OIDC provider configuration in Lovable
In Lovable, review the confirmation page, then click Confirm & enable SSO to finish the configuration of Auth0 as your OIDC SSO provider.
1
Create an application in Auth0
Go to Auth0 Admin Dashboard → Applications.
Click Create application. Select the Regular Web Applications application type.
Give the app a name, for example Lovable SAML SSO.
Click Create.
2
Configure Allowed Callback URLs
In Auth0, go to your application settings.
Add the Allowed Callback URLs: https://auth.lovable.dev/__/auth/handler
Click Save.
3
Configure SAML2 Web App Add-on
In Auth0, navigate to Addons, and enable SAML2 Web app.
In Lovable, choose between quick SAML provider setup or manual configuration:Option 1: Quick setup - import from metadata URL
In Auth0 → Addon: SAML2 Web app → Usage, locate the Identity Provider Metadata, and click the arrow icon to get the URL.
In Lovable, paste the metadata URL in Quick setup: import from metadata URL field.
Click Test & import to automatically populate the required fields below.
Option 2: Manual configurationIn Auth0 → Addon: SAML2 Web app → Usage, copy the following SAML Protocol Configuration Parameter values and enter them in Lovable.
Download Auth0 certificate and copy the X509Certificate value. Paste the certificate value between the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines.
5
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
6
Finish SAML provider configuration in Lovable
In Lovable, click Configure SAML provider, review the confirmation page, then click Confirm & enable SSO to finish the configuration of Auth0 as your SAML SSO provider.
In the Add from the gallery section, search for Lovable, select it in the results, and add it to your tenant.
Open the app, go to Single sign-on, and select Go to application to open the app’s registration.
Adding Lovable from the gallery replaces creating your own app registration. You still add the redirect URI, grant the permissions, and create a client secret in the steps below.
2
Add the Lovable redirect URI
In the app’s registration, go to Authentication.
In Redirect URIs, add https://auth.lovable.dev/__/auth/handler.
Click Configure.
The URL must match exactly, including the https:// protocol.
3
Configure the optional claims
In Microsoft Entra, go to Token configuration → Add optional claim.
Select ID token and add the email claim.
Click Add.
Lovable requires an email address in the ID token and has no fallback to the user principal name (UPN), so login fails for users whose token carries no email claim.
4
Configure the API permissions
In Microsoft Entra, go to API permissions, and check that the Microsoft Graph delegated permissions Lovable needs are listed:
email
openid
profile
To add any that are missing, click Add a permission → Microsoft Graph → Delegated permissions, select them, then click Add permissions.
Click Grant admin consent.
5
Create a client secret
In Microsoft Entra, go to Certificates & secrets → Client secrets → New client secret.
Enter a description, choose an expiry, and click Add. Note the expiration date so you can record it in Lovable.
Copy the secret Value immediately. It isn’t shown again after you leave the page.
6
Provide Lovable with your IdP information
In Lovable, enter the following:
OIDC Issuer URL / Discovery Endpoint: format the URL as https://login.microsoftonline.com/{TENANT_ID}/v2.0
Replace the {TENANT_ID} with the Directory (tenant) ID from the Overview page in Microsoft Entra.
Microsoft Entra Application (Client) ID, from the Overview page → Lovable OAuth Client ID / Application ID
The Microsoft Entra Client secret value you copied → Lovable OAuth Client Secret
Optionally, the date the client secret expires → Lovable Client secret expiration (optional)
7
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
8
Test the configuration in Lovable
In Lovable, click Test configuration. Lovable checks the issuer, client ID, and client secret and shows the outcome on the Test results screen. Fix anything it reports, then click Configure provider.
9
Finish OIDC provider configuration in Lovable
In Lovable, review the confirmation page, then click Confirm & enable SSO to finish the configuration of Microsoft Entra ID as your OIDC SSO provider.
1
Create an enterprise app in Microsoft Entra ID
Go to Microsoft Entra ID admin center → Enterprise applications, and select New application.
Select Create your own application and choose Integrate any other application you don’t find in the gallery (Non-gallery).
Give the app a name, for example Lovable SAML SSO.
Click Create. Your application is now created.
2
Configure SAML SSO
In Microsoft Entra, navigate to the Single sign-on setup page and select SAML. Under Basic SAML Configuration, enter the following:
Reply URL (Assertion Consumer Service URL): https://auth.lovable.dev/__/auth/handler
Leave the other values blank and select Save.
To let users log in to Lovable from the Microsoft My Apps portal, add a second Reply URL (Assertion Consumer Service URL): https://api.lovable.dev/sso/saml/idp-consume, and select it as the Default reply URL. See Set up IdP-initiated login (SAML) for requirements.
3
Provide Lovable with your IdP information
When the application is set up in Microsoft Entra, you can choose between quick SAML provider setup or manual configuration in Lovable.Option 1: Quick setup - import from metadata URL
In Microsoft Entra, go to SAML Certificates and copy the App Federation Metadata URL.
In Lovable, paste the App Federation Metadata URL in Quick setup: import from metadata URL field.
Click Test & import to automatically populate the required fields below.
Option 2: Manual configurationCopy the following values in Microsoft Entra and enter them in Lovable.
Microsoft Entra Login URL → Lovable SAML SSO Sign-on URL (from your IdP)
Microsoft Entra Microsoft Entra Identifier → Lovable Identity Provider Entity ID / Issuer
Microsoft Entra X509Certificate → Lovable X.509 signing certificates
You can download the certificate (Base 64) or open the App Federation Metadata URL in a new tab and copy the X509Certificate value. Paste the certificate value between the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines.
4
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
5
Finish SAML provider configuration in Lovable
In Lovable, click Configure SAML provider, review the confirmation page, then click Confirm & enable SSO to finish the configuration of Microsoft Entra ID as your SAML SSO provider.
You can configure any OIDC or SAML-compliant provider with Lovable SSO.Before you begin, complete Start SSO setup in Lovable to get the settings and values you need to use in your IdP.
OIDC
SAML
Provider mappingCommon field names across providers:
Client ID → Lovable OAuth Client ID / Application ID
Client Secret → Lovable OAuth Client Secret
Optionally, the date the client secret expires → Lovable Client secret expiration (optional)
5
Configure the display name and login URL
In Lovable, fill in the remaining fields:
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
6
Test the configuration in Lovable
In Lovable, click Test configuration. Lovable checks the issuer, client ID, and client secret and shows the outcome on the Test results screen. Fix anything it reports, then click Configure provider.
7
Finish OIDC provider configuration in Lovable
In Lovable, review the confirmation page, then click Confirm & enable SSO to finish the configuration of your OIDC SSO provider.
Provider mappingCommon field names across providers:
ACS URL: Single Sign-On URL, SSO URL, Reply URL, Assertion Consumer Service URL
Audience: SP Entity ID, Audience URI, Identifier
Attribute mapping: Attribute Statements, User Attributes & Claims
Steps
1
Create a SAML 2.0 application
Create a new SAML 2.0 application in your provider.
Display Name: The name shown to users during authentication.
Verified domain: The verified domain your login URL is based on. Lovable preselects it when you have only one.
Login URL suffix (optional): An addition to the login URL, for example engineering. Lovable shows the resulting URL below the field. See Your SSO login URL.
7
Finish SAML provider configuration in Lovable
In Lovable, click Configure SAML provider, review the confirmation page, then click Confirm & enable SSO to finish the configuration of your SAML SSO provider.
With IdP-initiated SSO, users start login from your identity provider’s app portal (for example, an Okta dashboard tile or the Microsoft My Apps portal) instead of from Lovable. IdP-initiated login is optional and available for SAML providers on Business and Enterprise plans. It requires no additional configuration in Lovable. SP-initiated login from Lovable keeps working as long as your IdP app still accepts the standard ACS URL (https://auth.lovable.dev/__/auth/handler). If your provider has only one ACS URL field, use a dedicated app for IdP-initiated login so both flows keep working.
A configured SAML SSO provider. OIDC providers support SP-initiated login only.
Your workspace is the only workspace that has verified your email domain. IdP-initiated login is disabled automatically while another workspace has the same domain verified.
Your IdP signs the SAML response (or the assertion within it) and scopes it to the Lovable SP Entity ID (https://auth.lovable.dev/__/auth/handler) through an Audience Restriction.
When a requirement is not met (for example, a second workspace verifies the same email domain), IdP-initiated login stops working and users see an error page such as Forbidden or Unauthorized. Login from Lovable is not affected, and you can switch back to SP-initiated login only at any time. See Troubleshooting.
Configure your SAML app (or a dedicated IdP-initiated app) to post the SAML response to the IdP-initiated ACS URL: https://api.lovable.dev/sso/saml/idp-consumeKeep the SP Entity ID / Audience URI unchanged: https://auth.lovable.dev/__/auth/handler.
Okta
Microsoft Entra ID
Auth0 and other providers
The Lovable app in the Okta App Catalog does not support IdP-initiated login yet. Its SAML settings are pre-configured and cannot be changed. For now, users logging in through Okta must start login from Lovable.
In your Lovable SAML enterprise application, go to Single sign-on → Basic SAML Configuration.
Add https://api.lovable.dev/sso/saml/idp-consume as an additional Reply URL (Assertion Consumer Service URL) and select it as the Default reply URL. Microsoft Entra sends IdP-initiated responses to the default reply URL.
Keep the Identifier (Entity ID) as https://auth.lovable.dev/__/auth/handler, and select Save.
Users can now log in to Lovable from the My Apps portal.
In your SAML application, set the ACS URL used for IdP-initiated login to https://api.lovable.dev/sso/saml/idp-consume. Providers also call this field Single sign-on URL, Reply URL, or Assertion Consumer Service URL. In Auth0, it is the Application Callback URL in the SAML2 Web App addon. The addon has a single callback URL, so create a dedicated Auth0 application for IdP-initiated login.
Keep the Audience / Entity ID as https://auth.lovable.dev/__/auth/handler.
Make sure your provider signs SAML responses or assertions.
IdP-initiated login is optional. If it does not work for your setup, point your SAML app back to https://auth.lovable.dev/__/auth/handler. This disables IdP-initiated login, and users log in from Lovable as usual. See Troubleshooting.
You can map the groups your identity provider sends in its login claims to Lovable workspace roles, so people receive the right role automatically, and optionally restrict SSO login to mapped groups only. Mappings can also add members to your workspace groups. See Add members to workspace groups automatically. Group mappings work with both OIDC and SAML providers on Business and Enterprise plans.To manage group mappings, go to Identity (Workspace settings → Access → Identity) and find Provisioning groups. If you have multiple SSO providers, use the section for the provider you want to configure. There you can:
Map an IdP group to a workspace role. Click Add group. In Add provisioning group, enter the Group name exactly as your IdP sends it, then choose a Default role: Viewer, Editor, or Admin. Workspace owners can also select Owner. Click Add. Users whose login includes a matching group claim get that role when they join. Claims must match mappings exactly, including capitalization. If several mapped groups match, the highest-privilege role wins.
Enable Group restriction. While it is disabled, matched users get their group’s role and everyone else logs in with the provider’s Default role for new members (Editor if you haven’t changed it). While it is enabled, only users whose IdP group matches one of your mappings can log in through the provider. Everyone else is denied.
Your IdP must include group information in its login claims for mappings to match. See Send group claims from your IdP.Role mapping and group membership sync also require SSO login (JIT) provisioning to be enabled. With JIT disabled, matched users log in without receiving a mapped role or group membership. Group restriction applies either way.
Group mappings also provision group membership. When a user logs in through SSO with a group claim that matches a mapping, Lovable adds the user to the workspace group with the same name as that mapping.
Groups are matched by name. To add members to an existing Lovable group, enter its exact name in Group name, including capitalization.
Lovable creates the group if it does not exist. The first matching login creates a workspace group named after the mapping and adds the user to it. Groups control access to projects, folders, and published apps, so review what a new group can access in Groups (Workspace settings → Access → Groups). Unmapped group claims never create groups.
SCIM-managed groups are the exception. If your workspace groups come from SCIM provisioning, Lovable does not create groups from login claims.
Membership is only added, never removed. Lovable does not remove anyone from a group based on login claims. Remove members from groups yourself if needed. To manage the full group lifecycle from your IdP, including removals, use SCIM provisioning on the Enterprise plan.
Lovable reads groups from a claim named groups in the login response, for both OIDC and SAML providers. The default SAML group claim names used by Microsoft Entra ID (http://schemas.microsoft.com/ws/2008/06/identity/claims/groups) and AD FS (http://schemas.xmlsoap.org/claims/Group) are also recognized, so you can keep those defaults.The claim must contain group names, not group IDs. Send names as multiple attribute values, or as a single value separated by commas or semicolons.
Okta
Microsoft Entra ID
Other providers
Configure the group claim on your Lovable app in the Okta Admin Console.SAMLWhere the group attribute is configured depends on how you added the Lovable app:
App Catalog app: the app’s SAML settings are pre-configured and cannot be edited. Open the app’s Sign On tab and look for a Group Attribute Statements section there. If the app doesn’t offer one, it cannot send group claims: use the Lovable OIDC app instead, or create a custom SAML app following Configure other providers.
Custom SAML app: open the app’s General tab and click Edit under SAML Settings.
Add a group attribute statement with:
Name: groups
Name format: Unspecified
Filter: a filter matching the groups to send, for example Matches regex.* to send all of the user’s groups.
Save your changes.OIDC
Open your Lovable OIDC app and go to the Sign On tab.
Under OpenID Connect ID Token, click Edit and set Groups claim type to Filter.
Set the groups claim name to groups with a filter matching the groups to send, for example Matches regex.*.
Save your changes.
Okta sends group names in the claim, so values match your mappings as long as the names line up.
In your Lovable enterprise application, go to Single sign-on → Attributes & Claims → Edit.
Click Add a group claim.
Choose which groups to include. Groups assigned to the application is recommended: it sends only the groups assigned to the Lovable app and avoids token size limits.
Set Source attribute to an option that emits group names, such as Cloud-only group display names, or sAMAccountName for groups synced from on-premises Active Directory.
Save the claim. You can keep the default claim name: Lovable recognizes Microsoft Entra’s default group claim.
By default, Microsoft Entra ID sends group object IDs (GUIDs) instead of names. Object IDs never match name-based mappings, so make sure the claim’s source attribute emits group names.
In your SAML or OIDC application, include a group attribute or claim named groups in the login response.
Make sure the values are group names (not IDs) and cover the groups you mapped in Lovable.
Workspace owners and admins can change a provider’s settings without deleting it. Go to Identity (Workspace settings → Access → Identity) and click the provider in the SSO providers section. The provider dialog includes these tabs:
General: the Display name, the Login URL suffix, and the Default role for new members.
Connection: the settings Lovable uses to verify sign-ins from your identity provider. For SAML, the Identity provider entity ID, the Sign-on URL, and the Signing certificates. For OIDC, the Client ID, the Issuer, and a new Client secret with its expiration date. A new entity ID, client ID, or issuer moves the provider to a different identity provider. See Move to a new identity provider.
Enterprise-managed authentication: enable, update, or disable access to Lovable from Claude through this provider. See Set up enterprise-managed authentication.
Manage group mappings and Group restriction under Provisioning groups on the Identity page. See Map IdP groups to workspace roles.Your changes take effect when you click Save changes. Before Lovable saves a change on the Connection tab, it checks the values. For SAML, Lovable validates the sign-on URL and reads every certificate. For OIDC, Lovable contacts your provider to check the new client secret. If a check fails, Lovable shows the error and keeps the current configuration. If Lovable cannot reach your provider, or your provider does not support checking a secret in advance, Lovable saves the new secret and shows a warning that it could not check the secret. Your provider then checks the secret at the next login. Each saved connection change appears in the audit log as SSO connection updated.
When your workspace moves to a different identity provider, edit the existing SSO provider instead of deleting it. Editing keeps the settings that deleting disables, such as Enforce SSO, SCIM provisioning, and the domain lock.Members keep their accounts, but each account stays linked to the old identity provider. A member cannot log in through the new provider until that link is removed.Members with another login method can unlink the old provider in Account settings → Account → Login methods. For members who log in only with SSO, contact Lovable support to remove the link.Before you move the provider, delete its IdP group role mappings and disable enterprise-managed authentication for it. Both were set up for the old identity provider, so Lovable shows an error and does not save the move while either is still in place.To move the provider, click it in the SSO providers section of Identity (Workspace settings → Access → Identity). On the Connection tab, enter the new provider’s details:
SAML: the new Identity provider entity ID, and the new provider’s signing certificate under Add a certificate. When you save, Lovable removes the current certificates and no longer accepts sign-ins signed by the old provider.
OIDC: the new Client ID, the new Issuer, or both, and the new provider’s Client secret.
When you save, Lovable asks you to confirm the change.You cannot change a provider between SAML and OIDC. A workspace has one SSO provider, so to change the protocol, delete the provider and set up a new one. See Delete an SSO provider.
You can add up to 10 signing certificates to a SAML provider, and Lovable accepts sign-ins signed with any of them. When your identity provider issues a new signing certificate, paste it under Add a certificate on the Connection tab before your provider starts using it, so login continues without interruption. Remove the old certificate with its delete icon after the switch. Each certificate shows its subject, fingerprint, and expiration date. Lovable warns when a certificate expires within 30 days and does not save a change that leaves only expired certificates.During setup, Test & import from your metadata URL adds the signing certificates listed in your metadata.
Your identity provider does not share the expiration date of an OIDC client secret with Lovable, so you record it yourself. During setup, choose 3 months, 6 months, 12 months, Custom, or No expiration under Client secret expiration (optional). When you enter a new client secret on the Connection tab, choose from the same options under New secret expiration (optional).A badge next to the client secret on the Connection tab shows its status:
Valid until and the date, while more than 30 days remain.
Expires in and the number of days, during the last 30 days.
Expires today, on the expiration date.
Expired and the date, after the expiration date has passed.
Lovable does not send a notification before a secret expires. Check the badge when you plan to create a new secret. When you enter a new secret without a date, Lovable clears the stored expiration date.
To change a provider’s sign-on URL, certificates, client secret, or identity provider, edit it instead of deleting it. See Manage an existing SSO provider.To remove your workspace SSO provider, go to Identity (Workspace settings → Access → Identity), find the provider in the SSO providers section, and click its delete icon.Because a workspace can have only one SSO provider, deleting it turns off SSO for the workspace. Lovable shows a Delete SSO provider confirmation dialog that lists what else it disables, based on your workspace’s current configuration:
Turn off Enforce SSO: members can use the workspace again without an SSO session.
Remove SCIM provisioning: the SCIM API key is revoked and SCIM-managed groups are deleted. Existing workspace members are not removed. See Set up SCIM user provisioning.
Disable this workspace’s domain lock: people with emails on your verified domains can create their own workspaces again, unless another workspace still locks the domain.
Delete n IdP group role mappings, where n is your number of mappings: IdP groups no longer grant workspace roles on login.
The dialog lists each of these only when it applies to your workspace. Click Delete provider to confirm.
Deleting a provider cannot be undone. To use SSO again, you need to configure the provider again from the beginning. Lovable does not keep the previous configuration.
Members keep their workspace access after the provider is deleted. Members whose only login method was that provider can recover their account themselves at the next login. See Recover access after an SSO provider is removed.Each side effect is recorded in the audit log: both the SSO provider removed entry (with the exact settings that were turned off) and, when SCIM was configured, a separate SCIM disabled entry.
Ensure the redirect/callback URL exactly matches https://auth.lovable.dev/__/auth/handler in your IdP.
Issuer URL / discovery fails
Use the provider’s OIDC Issuer URL, not only the domain.
For Okta, copy from the Sign-on tab
For Auth0, use your tenant domain.
Email not returned
Grant the email scope and ensure the user account has a primary email.
Authorization flow issues
Use Authorization Code with a confidential client and client secret. Avoid implicit or PKCE-only app types.
Login stops working after the client secret expires
Create a new client secret in your identity provider, then enter it on the provider’s Connection tab in Lovable and record its expiration date. See Track the OIDC client secret expiration.
Invalid ACS or Audience
Ensure both ACS and Audience/Entity ID exactly match https://auth.lovable.dev/__/auth/handler in your IdP.
Email claim missing
Make sure to map an email claim.For Microsoft Entra ID, map email to user.mail. If user.mail is empty, use user.userprincipalname.
Provider credentials invalid
Paste the correct X.509 certificate. If your identity provider rotates its certificate, add the new one on the provider’s Connection tab. See Rotate a SAML signing certificate.
Group mappings don't match
If users get the default role instead of their mapped role, or Group restriction denies people it shouldn’t:
Make sure the assertion includes a group attribute named groups (Microsoft Entra ID’s and AD FS’s default group claim names also work). See Send group claims from your IdP.
Make sure the claim contains group names, not IDs. Microsoft Entra ID sends object IDs unless the group claim’s source attribute is set to emit names.
Claim matching is case-sensitive, so the value your IdP sends must match your mapping exactly, including capitalization.
Make sure SSO login (JIT) provisioning is enabled. With it disabled, users log in without receiving mapped roles or group memberships.
IdP-initiated login fails or shows an error page
If starting login from your IdP’s app portal shows an error page (for example, Forbidden or Unauthorized):
Make sure your email domain is verified in only one Lovable workspace. IdP-initiated login is disabled automatically while more than one workspace has verified the same domain.
Make sure your IdP signs the SAML response (or the assertion within it) and the Audience Restriction matches https://auth.lovable.dev/__/auth/handler.
If your provider restricts access by group, make sure the user’s SAML assertion includes a matching group claim. This also applies when logging in from Lovable.
If login still fails, change the ACS URL in your IdP app back to https://auth.lovable.dev/__/auth/handler. This disables IdP-initiated login and restores SP-initiated login from Lovable. IdP-initiated login is optional, so you can stay on SP-initiated login only and try again when the requirements are met.
Recover access after an SSO provider is removed
Workspace members who only ever logged in through the deleted SSO provider can recover access themselves from the standard Lovable login page, with no admin action or support request required. When they enter their email on the login page, Lovable detects that their only login method was the removed provider and shows a recovery panel:
If the workspace has a replacement SSO provider on the same verified domain, the panel shows Reconnect your account with a login button for the new provider. Clicking it logs the user in with that provider and links the new identity to their existing account, so their projects, roles, and history are preserved. If linking cannot happen automatically (for example, the new provider does not verify the same email), the panel falls back to the password path below.
If there is no replacement SSO provider, the panel shows Set a password for your account and offers to email a link. The user opens the link, sets a password, and logs in with email and password from then on.
Users with any other working login method (password, Google, GitHub, Apple, or another still-valid SSO provider) are not affected and continue to log in normally.
I already have an account, but I'm joining a business workspace that uses SSO. How do I log in?
If you created your account using another login method (such as email and password, Google, or GitHub), you need to log in that way first. When you’re logged in, go to Account settings → Account → Login methods and click Link account under Link company account, then log in with your company SSO. This links your existing account to your company SSO.
Important: If you attempt to log in with SSO before linking your existing account, you’ll see an error. This is a security measure to prevent unauthorized access. Log in using your original method first to complete the linking process.
Can members who log in with SSO use 'Forgot password?' on the login page?
No. Forgot password? only works for accounts that have an email and password login method.If your account logs in through Google, GitHub, Apple, or a SAML/OIDC SSO provider, Lovable does not send a password reset email and shows a Password reset unavailable message, because completing a reset would add a password to an account that is meant to log in through your provider. Reset your credentials with your identity provider instead (for example, Google Account recovery or your company IdP).
Exception for deleted SSO providers: if your only login method was an SSO provider that has since been removed from your workspace, you can set a password for the first time through the recovery flow on the login page. See Recover access after an SSO provider is removed.
Which SSO providers does Lovable support?
Lovable supports the industry-standard OIDC and SAML protocols, so you can integrate with any SSO provider that supports them.
Does Lovable support multiple SSO providers per workspace?
No. A workspace can have one active SSO provider configured at a time.
Can I enforce SSO for my workspace?
Yes. The workspace owner or admin can enable Enforce SSO in Identity (Workspace settings → Access → Identity) and choose the Session duration that sets how long users stay logged in before Lovable requires a new SSO login (8 hours, 24 hours, 48 hours, or 7 days).All workspace members must then log in through SSO. When you enable it, Lovable asks whether to remove external collaborators from your projects. Invite links keep working only for people whose email is on one of your verified domains. See Enforce SSO.Test an SSO login first. For six hours after you add a provider, the Enforce SSO toggle stays disabled and shows Wait 6 hours and test SSO login before enforcing SSO.
Does Lovable support IdP-initiated SSO?
Yes. SAML providers can optionally enable IdP-initiated login: users start login from your IdP’s app portal once your SAML app posts the SAML response to https://api.lovable.dev/sso/saml/idp-consume. It only works while your workspace is the only workspace that has verified your email domain, and SP-initiated login from Lovable keeps working either way. See Set up IdP-initiated login (SAML).OIDC providers support SP-initiated login only: users must start login from Lovable.
What should I do if IdP-initiated login shows an error?
An error page such as Forbidden or Unauthorized means the requirements are not met. First, make sure your email domain is verified in only one Lovable workspace. IdP-initiated login is disabled automatically while more than one workspace has verified the same domain.If login still fails, change the ACS URL in your IdP app back to https://auth.lovable.dev/__/auth/handler. IdP-initiated login is optional: users log in from Lovable as usual, and you can try again when the requirements are met.
Does Lovable support just-in-time (JIT) provisioning with SSO?
Yes, Lovable supports JIT (just-in-time) provisioning through SSO. User accounts are created automatically the first time someone logs in via SSO, and they’re added to your company workspace.You can also set the provider’s Default role for new members (Viewer, Editor, or Admin), which applies when users join via SSO for the first time. If you don’t change it, JIT-created users join as an Editor.On Enterprise plans, workspace owners and admins can enable or disable SSO JIT from the SSO login row in Identity (Workspace settings → Access → Identity → User provisioning). The toggle appears once an SSO provider is configured.On Business plans, SSO JIT is automatically enabled when an SSO provider is configured, and the row shows a read-only Enabled or Disabled status. Contact Lovable support if you need it changed. See Manage workspace identity and user provisioning for how the provisioning options work together.
What happens to existing members when I set up group mappings?
Existing members keep their current role. Lovable applies group-to-role mappings when someone joins the workspace through SSO. If several mapped groups match, the highest-privilege role wins.On each SSO login, members are also added to any workspace groups whose names match their IdP group claims. Lovable never removes anyone from a group automatically. Remove members from groups yourself if needed.Enabling Group restriction affects existing members: anyone logging in through the provider without a matching group claim is denied, so make sure your mappings cover everyone who should keep access. See Map IdP groups to workspace roles.
Does Lovable create workspace groups from IdP group claims?
Yes, for mapped groups. When a login matches a mapping and your workspace has no group with that name, Lovable creates the group and adds the user to it. Unmapped group claims never create groups, and Lovable does not create groups from login claims when your workspace groups come from SCIM provisioning. See Add members to workspace groups automatically.
Does Lovable support SCIM or automatic user provisioning?
Yes. Lovable supports SCIM provisioning for automated user provisioning and deprovisioning on the Enterprise plan.With SCIM, user creation, removal, and role assignment are managed centrally from your identity provider based on assignments and group membership.See Set up SCIM user provisioning for more information.
How can I find my tenant ID (SSO login identifier)?
Your tenant ID is the {tenantId} value in your SSO login URL, https://lovable.dev/sso-login/{tenantId}. It is your verified domain with dots replaced by hyphens, plus the optional Login URL suffix you entered during setup.After setup, the full URL appears in the SSO providers row in Identity (Workspace settings → Access → Identity) and in the provider’s Login URL field. See Your SSO login URL.
How can I edit my SSO provider configuration?
Click the provider in Identity (Workspace settings → Access → Identity) to open its settings. On the General tab you can change the Display name, the Login URL suffix, and the Default role for new members, then click Save changes. The Connection tab lets you change the SAML sign-on URL and signing certificates, or enter a new OIDC client secret and its expiration date. Manage group mappings and Group restriction under Provisioning groups on the Identity page.Use the Enterprise-managed authentication tab to manage access from Claude.To move to a new identity provider, change the entity ID, issuer, or client ID on the Connection tab. See Move to a new identity provider.
Deleting the provider also turns off Enforce SSO, removes SCIM provisioning (revoking the SCIM API key and deleting SCIM-managed groups), disables the verified-domain lock, and deletes any IdP group role mappings. The delete dialog lists exactly which of these apply before you confirm. See Delete an SSO provider.
What happens to users who only logged in via SSO if we delete the provider?
They keep their workspace access and can recover their account themselves from the login page: either by logging in through a replacement SSO provider (Lovable links the new identity to their existing account) or by setting a password through an emailed link. See Recover access after an SSO provider is removed.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Lovable Documentation","description":"Lovable Documentation — Build full-stack websites with AI using natural language. Explore Lovable features, integrations, tutorials, and best practices.","colors":{"primary":"#0095FF","light":"#1AA3FF","dark":"#0084E6"},"logo":{"light":"https://mintcdn.com/lovable-f9060f1e/lZT1ihBcprll2Agr/assets/logo/logoblack.svg?fit=max\u0026auto=format\u0026n=lZT1ihBcprll2Agr\u0026q=85\u0026s=8d9eafaf19f94e27f0d13ac160d54f54","dark":"https://mintcdn.com/lovable-f9060f1e/lZT1ihBcprll2Agr/assets/logo/logowhite.svg?fit=max\u0026auto=format\u0026n=lZT1ihBcprll2Agr\u0026q=85\u0026s=fed1a7a9be6502f49d06a55cec77288c","href":"https://lovable.dev/"},"favicon":"https://mintcdn.com/lovable-f9060f1e/b_1_IEcMDh-0NUDG/assets/logo/favicon.svg?fit=max\u0026auto=format\u0026n=b_1_IEcMDh-0NUDG\u0026q=85\u0026s=a439abba3defb47beabd3f6e7d318cb5","api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl"],"prefill":true,"autogenerate":true},"url":"full"},"navbar":{"links":[{"icon":"message","href":"https://lovable.dev/support","label":"Support"},{"icon":"blog","href":"https://lovable.dev/blog","label":"Blog"}],"primary":{"type":"button","label":"Start building for free","href":"https://lovable.dev/signup?utm_source=lovable_docs\u0026utm_medium=navigation"}},"footer":{"socials":{"x":"https://x.com/Lovable","github":"https://github.com/lovablelabs","linkedin":"https://linkedin.com/company/lovable-dev","youtube":"https://youtube.com/@lovable","discord":"https://discord.gg/lovable-dev","reddit":"https://www.reddit.com/r/lovable"}},"seo":{"metatags":{"og:image":"/assets/logo/opengraph-image.png","canonical":"https://docs.lovable.dev"},"indexing":"all"},"contextual":{"options":["copy","assistant","download-pdf","download-spec"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lovable-f9060f1e","hasAudioNarration":false,"actualSubdomain":"lovable-f9060f1e","customDomains":["docs.lovable.dev"],"gitSource":{"type":"github","owner":"lovablelabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4ba7e39bc6f1b8c5083c4","collectionId":"be62575e-7d4d-4f47-8039-e68eba8e6629","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4ba7e39bc6f1b8c5083c4"},"feedback":{"thumbs":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4ba7e39bc6f1b8c5083c4","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Documentation","count":273},{"language":"default","tag":"Connect","count":125},{"language":"default","tag":"Connector catalog","count":113},{"language":"default","tag":"Build","count":69},{"language":"default","tag":"API Reference","count":33},{"language":"default","tag":"Workspace \u0026 account","count":29},{"language":"default","tag":"Lovable API","count":27},{"language":"default","tag":"Endpoints","count":25},{"language":"default","tag":"Data \u0026 databases","count":21},{"language":"default","tag":"Backend","count":19}]},"assistantConfig":{"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"deflection":{"enabled":true,"type":"link","email":"support@lovable.dev","url":"https://lovable.dev/support"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"assets/css/styles.css","content":".supabase{color:#59cf8c}"}],"page":{"pagePath":"features/business/sso","slug":"/features/business/sso","pageMetadata":{"title":"Set up workspace single sign-on (SSO)","sidebarTitle":"Workspace SSO","description":"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.","keywords":["single sign-on","sso","SSO setup","SSO configuration","SSO integration","enterprise SSO","enforce SSO","identity provider","OIDC","SAML","Okta SSO","Auth0 SSO","Microsoft Entra ID SSO","Azure AD SSO","SSO group mapping","group claims","group-based provisioning","group restriction","IdP groups","IdP-initiated SSO","IdP-initiated SAML"],"href":"/features/business/sso"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,Heading,Info,Note,Step,Steps,Tab,Tabs,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Note,{children:[_jsxs(_components.p,{children:[`This page documents `,_jsx(_components.strong,{children:`workspace-level SSO for your team’s access to Lovable itself`}),`. It is configured at the workspace level under `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`).`]}),_jsxs(_components.p,{children:[`Looking for SAML SSO for the `,_jsx(_components.strong,{children:`end users of your app`}),`? See `,_jsx(_components.a,{href:`/features/saml-sso`,children:`Add SAML single sign-on to your app`}),`. Want apps you build to `,_jsx(_components.strong,{children:`recognize logged-in workspace members without a login page`}),`? See `,_jsx(_components.a,{href:`/features/lovable-workspace-identity-reuse`,children:`Reuse Lovable workspace identity in your app`}),`. Both are different features.`]})]}),`\n`,_jsxs(_components.p,{children:[`Single sign-on (SSO) is available on `,_jsx(_components.strong,{children:`Business`}),` and `,_jsx(_components.strong,{children:`Enterprise`}),` plans and enables secure, centralized authentication across your company. With SSO, users can access Lovable with one set of credentials, simplifying access management and improving security.`]}),`\n`,_jsxs(Note,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Service provider (SP)-initiated login`}),` is supported for all providers: users start login from Lovable.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Identity provider (IdP)-initiated SSO`}),` (starting from an IdP dashboard tile) can optionally be enabled for `,_jsx(_components.strong,{children:`SAML`}),` providers. See `,_jsx(_components.a,{href:`#set-up-idp-initiated-login-saml`,children:`Set up IdP-initiated login (SAML)`}),`. OIDC providers support SP-initiated login only.`]})]}),`\n`,_jsxs(_components.p,{children:[`To let members use Lovable from Claude through this SSO provider, see `,_jsx(_components.a,{href:`/features/enterprise-managed-auth`,children:`Set up enterprise-managed authentication`}),`. Claude supports this flow with `,_jsx(_components.strong,{children:`Okta only`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`If your workspace belongs to an `,_jsx(_components.a,{href:`/features/organizations`,children:`organization`}),`, an org admin can set up SSO once for every workspace. See `,_jsx(_components.a,{href:`/features/organization-identity#set-up-sso-for-the-organization`,children:`Set up SSO for the organization`}),`. If the workspace is `,_jsx(_components.strong,{children:`Managed by the organization`}),`, its `,_jsx(_components.strong,{children:`Identity`}),` tab shows that the organization manages these settings.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`supported-sso-protocols`,children:`Supported SSO protocols`}),`\n`,_jsxs(_components.p,{children:[`Lovable supports both `,_jsx(_components.strong,{children:`OIDC`}),` and `,_jsx(_components.strong,{children:`SAML 2.0`}),` protocols, enabling integration with all major `,_jsx(_components.strong,{children:`identity providers (IdP)`}),` including Okta, Auth0, Microsoft Entra ID (Azure AD), and more.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`OpenID Connect (OIDC)`}),`: recommended. A modern identity layer built on OAuth 2.0 that verifies who is logging in.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SAML (Security Assertion Markup Language) 2.0`}),`: XML-based protocol for exchanging authentication and authorization data, widely used in enterprise environments.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsx(_components.p,{children:`To connect your identity provider to Lovable using OIDC or SAML, you need:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Admin access to your identity provider`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Workspace owner or admin role`}),` in Lovable`]}),`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.strong,{children:`verified domain`}),` in Lovable, to prove domain ownership`,`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`To verify your domain, add the `,_jsx(_components.code,{children:`TXT`}),` record displayed in the UI to your DNS provider. See `,_jsx(_components.a,{href:`/features/verified-domains`,children:`Verify a domain for your workspace`}),` for the full walkthrough, including record details and troubleshooting.`]})}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`start-sso-setup-in-lovable`,children:`Start SSO setup in Lovable`}),`\n`,_jsxs(_components.p,{children:[`SSO configuration is a `,_jsx(_components.strong,{children:`two-way setup`}),` between Lovable and your identity provider:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Lovable → IdP:`}),` copy Lovable URLs and settings into your IdP app.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`IdP → Lovable:`}),` copy your IdP’s issuer, metadata, and certificates back into Lovable.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The workspace `,_jsx(_components.strong,{children:`owner`}),` or `,_jsx(_components.strong,{children:`admin`}),` can set up SSO. To start, go to `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) and click `,_jsx(_components.strong,{children:`Add provider`}),` in the `,_jsx(_components.strong,{children:`SSO providers`}),` section. On the `,_jsx(_components.strong,{children:`Choose SSO Protocol`}),` screen, click `,_jsx(_components.strong,{children:`Configure OIDC`}),` or `,_jsx(_components.strong,{children:`Configure SAML`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Add provider`}),` stays disabled until your workspace has a verified domain and shows `,_jsx(_components.strong,{children:`Add a verified domain first`}),`. Add one in the `,_jsx(_components.strong,{children:`Verified domains`}),` section, then start SSO setup.`]})}),`\n`,_jsx(_components.p,{children:`The setup then runs in three stages:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Preparation.`}),` Lovable shows what to configure in your IdP, such as the app type, scopes, and attribute mappings, and the Lovable URLs to copy into your IdP. The values are listed in the reference below.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Configuration.`}),` You enter your IdP’s issuer and client credentials or certificates, a display name, and the verified domain your login URL is based on. The provider guides below list the exact fields.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Test and confirm.`}),` For OIDC, `,_jsx(_components.strong,{children:`Test configuration`}),` checks your values before you continue. Both protocols end on a confirmation page where you click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`idp-configuration-reference`,children:`IdP configuration reference`}),`\n`,_jsx(_components.p,{children:`Use these values while configuring OIDC or SAML in your IdP. Lovable shows the same values on the preparation screens, with copy buttons on the URLs.`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`OIDC`,id:`oidc`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Application type: `,_jsx(_components.code,{children:`Web Application`}),` or `,_jsx(_components.code,{children:`Server-side Application`})]}),`\n`,_jsxs(_components.li,{children:[`Grant type: `,_jsx(_components.code,{children:`Authorization Code`})]}),`\n`,_jsxs(_components.li,{children:[`Token method: `,_jsx(_components.code,{children:`POST`}),` (if configurable)`]}),`\n`,_jsxs(_components.li,{children:[`Redirect URI to copy and add to your IdP: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`OAuth scopes:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Required: `,_jsx(_components.code,{children:`openid`}),`, `,_jsx(_components.code,{children:`email`})]}),`\n`,_jsxs(_components.li,{children:[`Recommended: `,_jsx(_components.code,{children:`profile`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Optional claims: `,_jsx(_components.code,{children:`department`}),`, `,_jsx(_components.code,{children:`title`}),`, `,_jsx(_components.code,{children:`division`}),`, `,_jsx(_components.code,{children:`manager`}),`, for the member’s department, job title, division, and manager’s display name. Lovable also accepts `,_jsx(_components.code,{children:`departmentName`}),`, `,_jsx(_components.code,{children:`jobTitle`}),`, `,_jsx(_components.code,{children:`managerDisplayName`}),`, and `,_jsx(_components.code,{children:`managerName`}),`. Claim names are case-sensitive. Lovable shows the department in `,_jsx(_components.a,{href:`/features/insights#adoption-by-department`,children:`Insights`}),`.`]}),`\n`]})}),_jsx(Tab,{title:`SAML`,id:`saml`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`ACS URL (Assertion Consumer Service): `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`SP Entity ID / Audience URI: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`IdP-initiated ACS URL (optional, see `,_jsx(_components.a,{href:`#set-up-idp-initiated-login-saml`,children:`Set up IdP-initiated login (SAML)`}),`): `,_jsx(_components.code,{children:`https://api.lovable.dev/sso/saml/idp-consume`})]}),`\n`,_jsxs(_components.li,{children:[`Attribute mappings:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`displayName`}),` (recommended): map to user’s full name`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`photoURL`}),` (recommended): map to user’s profile picture URL`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`department`}),`, `,_jsx(_components.code,{children:`title`}),`, `,_jsx(_components.code,{children:`division`}),`, `,_jsx(_components.code,{children:`manager`}),` (optional): map to the member’s department, job title, division, and manager’s display name. Lovable also accepts `,_jsx(_components.code,{children:`departmentName`}),`, `,_jsx(_components.code,{children:`jobTitle`}),`, `,_jsx(_components.code,{children:`managerDisplayName`}),`, and `,_jsx(_components.code,{children:`managerName`}),`. Attribute names are case-sensitive. Lovable shows the department in `,_jsx(_components.a,{href:`/features/insights#adoption-by-department`,children:`Insights`}),`.`]}),`\n`,_jsx(_components.li,{children:`Email is not a separate attribute. Lovable reads it from the Name ID, so the Name ID source must be the user’s email address, not a login identifier.`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Protocol settings:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Name ID format: `,_jsx(_components.code,{children:`EmailAddress`})]}),`\n`,_jsxs(_components.li,{children:[`Signature algorithm: `,_jsx(_components.code,{children:`RSA-SHA256`})]}),`\n`,_jsxs(_components.li,{children:[`SAML binding: `,_jsx(_components.code,{children:`HTTP-POST`})]}),`\n`,_jsx(_components.li,{children:`Response signed: yes`}),`\n`]}),`\n`]}),`\n`]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`your-sso-login-url`,children:`Your SSO login URL`}),`\n`,_jsxs(_components.p,{children:[`Each provider gets a login URL that members can use to log in with SSO directly: `,_jsx(_components.code,{children:`https://lovable.dev/sso-login/{tenantId}`}),`. The `,_jsx(_components.code,{children:`{tenantId}`}),` part is your verified domain with dots replaced by hyphens, for example `,_jsx(_components.code,{children:`acme-com`}),` for `,_jsx(_components.code,{children:`acme.com`}),`. If you enter a `,_jsx(_components.strong,{children:`Login URL suffix`}),` during setup, Lovable appends it, for example `,_jsx(_components.code,{children:`acme-com-engineering`}),`. Login identifiers are unique across Lovable, so a second workspace on the same domain needs a suffix. After setup, the URL appears in the `,_jsx(_components.strong,{children:`SSO providers`}),` row and in the provider’s `,_jsx(_components.strong,{children:`Login URL`}),` field, each with a copy button.`]}),`\n`,_jsx(Heading,{level:`3`,id:`enforce-sso`,children:`Enforce SSO`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Enforce SSO`}),` requires an active SSO session to use the workspace. Members who log in another way are asked to log in through your provider before they can access it. The toggle in `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) becomes available when your workspace has a verified domain and an SSO provider. Test an SSO login before you enable it: for six hours after you add a provider, the toggle stays disabled and shows `,_jsx(_components.strong,{children:`Wait 6 hours and test SSO login before enforcing SSO`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`When you enable the toggle, Lovable opens the `,_jsx(_components.strong,{children:`Enable enforce SSO`}),` dialog:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Keep `,_jsx(_components.strong,{children:`Remove all external collaborators`}),` selected and click `,_jsx(_components.strong,{children:`Enable and remove`}),` to remove external collaborators from every project in the workspace.`]}),`\n`,_jsxs(_components.li,{children:[`Clear it and click `,_jsx(_components.strong,{children:`Enable`}),` to keep them. Lovable then sets the external collaborator level to allow all collaborators. You can change it later in `,_jsx(_components.a,{href:`https://lovable.dev/settings/privacy-security`,children:_jsx(_components.strong,{children:`Workspace settings → Security → Privacy \u0026 security`})}),`. See `,_jsx(_components.a,{href:`/features/privacy-and-security-settings`,children:`Privacy and security settings`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`While SSO is enforced, invite links only work for people whose email is on one of your verified domains. Use `,_jsx(_components.strong,{children:`Session duration`}),` to choose how long members stay logged in before Lovable requires a new SSO login: `,_jsx(_components.strong,{children:`8 hours`}),`, `,_jsx(_components.strong,{children:`24 hours`}),`, `,_jsx(_components.strong,{children:`48 hours`}),`, or `,_jsx(_components.strong,{children:`7 days`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Enforce SSO`}),` and `,_jsx(_components.a,{href:`/features/privacy-and-security-settings#require-two-factor-authentication`,children:`Require two-factor authentication`}),` are mutually exclusive. When you enable `,_jsx(_components.strong,{children:`Enforce SSO`}),`, Lovable automatically disables `,_jsx(_components.strong,{children:`Require two-factor authentication`}),`. Under enforced SSO, your identity provider is responsible for multi-factor authentication.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`provider-specific-setup-guides`,children:`Provider-specific setup guides`}),`\n`,_jsxs(_components.p,{children:[`If you use Okta, Auth0, or Microsoft Entra, you can find provider-specific documentation for setting up SSO. If you use another provider, see `,_jsx(_components.a,{href:`#configure-other-providers`,children:`Configure other providers`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Before you begin, complete `,_jsx(_components.a,{href:`#start-sso-setup-in-lovable`,children:`Start SSO setup in Lovable`}),` to get the settings and values you need to use in your IdP.`]}),`\n`,_jsx(_components.p,{children:`For more information, refer to your IdP’s official documentation.`}),`\n`,_jsx(Heading,{level:`3`,id:`configure-okta-as-your-sso-provider`,children:`Configure Okta as your SSO provider`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`OIDC`,id:`oidc-2`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Add the Lovable app in Okta`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Okta Admin Console`}),`, go to `,_jsx(_components.strong,{children:`Applications → Browse App Catalog`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Search for `,_jsx(_components.strong,{children:`Lovable`}),`, then click `,_jsx(_components.strong,{children:`Add Integration`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`General Settings`}),` screen, set the `,_jsx(_components.strong,{children:`Application label`}),` (for example, `,_jsx(_components.code,{children:`Lovable OIDC`}),`), then click `,_jsx(_components.strong,{children:`Next`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Sign-On Options`}),` screen, select `,_jsx(_components.strong,{children:`OpenID Connect`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.strong,{children:`Application username format`}),` to `,_jsx(_components.strong,{children:`Email`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Done`}),`.`]}),`\n`]})}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsxs(_components.p,{children:[`In Okta, copy the following values from the `,_jsx(_components.strong,{children:`Sign On`}),` tab and enter them in Lovable.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Okta `,_jsx(_components.code,{children:`Issuer URL`}),` → Lovable `,_jsx(_components.code,{children:`OIDC Issuer URL / Discovery Endpoint`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`To find your issuer, click the `,_jsx(_components.strong,{children:`OpenID Provider Metadata`}),` link on the `,_jsx(_components.strong,{children:`Sign On`}),` tab. The issuer is your Okta domain, for example `,_jsx(_components.code,{children:`https://your-org.okta.com`}),`.`]})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Okta `,_jsx(_components.code,{children:`Client ID`}),` → Lovable `,_jsx(_components.code,{children:`OAuth Client ID / Application ID`})]}),`\n`,_jsxs(_components.li,{children:[`Okta `,_jsx(_components.code,{children:`Client Secret`}),` → Lovable `,_jsx(_components.code,{children:`OAuth Client Secret`})]}),`\n`,_jsxs(_components.li,{children:[`Optionally, the date the client secret expires → Lovable `,_jsx(_components.code,{children:`Client secret expiration (optional)`})]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Test the configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Test configuration`}),`. Lovable checks the issuer, client ID, and client secret and shows the outcome on the `,_jsx(_components.strong,{children:`Test results`}),` screen. Fix anything it reports, then click `,_jsx(_components.strong,{children:`Configure provider`}),`.`]})}),_jsx(Step,{title:`Finish OIDC provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of Okta as your OIDC SSO provider.`]})})]})}),_jsx(Tab,{title:`SAML`,id:`saml-2`,children:_jsxs(Steps,{children:[_jsxs(Step,{title:`Add the Lovable app in Okta`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Okta Admin Console`}),`, go to `,_jsx(_components.strong,{children:`Applications → Browse App Catalog`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Search for `,_jsx(_components.strong,{children:`Lovable`}),`, then click `,_jsx(_components.strong,{children:`Add Integration`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`General Settings`}),` screen, set the `,_jsx(_components.strong,{children:`Application label`}),` (for example, `,_jsx(_components.code,{children:`Lovable SAML`}),`), then click `,_jsx(_components.strong,{children:`Next`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the `,_jsx(_components.strong,{children:`Sign-On Options`}),` screen, select `,_jsx(_components.strong,{children:`SAML 2.0`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.strong,{children:`Application username format`}),` to `,_jsx(_components.strong,{children:`Email`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Done`}),`.`]}),`\n`]}),_jsxs(Note,{children:[_jsx(_components.p,{children:`The SAML settings (ACS URL and Audience URI) are pre-configured by the Lovable integration. You do not need to enter any SAML values manually in Okta.`}),_jsxs(_components.p,{children:[`Because these settings cannot be changed, the catalog app does not support `,_jsx(_components.a,{href:`#set-up-idp-initiated-login-saml`,children:`IdP-initiated login`}),` yet. For now, users logging in through Okta must start login from Lovable.`]})]})]}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsx(_components.p,{children:`In Lovable, choose between quick SAML provider setup or manual configuration:`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: Quick setup - import from metadata URL`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In Okta, open the `,_jsx(_components.strong,{children:`Sign On`}),` tab of the Lovable application, scroll to `,_jsx(_components.strong,{children:`Metadata details`}),`, and copy the `,_jsx(_components.strong,{children:`Metadata URL`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In Lovable, paste the metadata URL in `,_jsx(_components.strong,{children:`Quick setup: import from metadata URL`}),` field.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Test \u0026 import`}),` to automatically populate the required fields below.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Manual configuration`})}),_jsx(_components.p,{children:`Open the metadata URL in a new tab. Copy the following values and enter them in Lovable.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Okta `,_jsx(_components.code,{children:`SingleSignOnService Location`}),` → Lovable `,_jsx(_components.code,{children:`SAML SSO Sign-on URL (from your IdP)`})]}),`\n`,_jsxs(_components.li,{children:[`Okta `,_jsx(_components.code,{children:`EntityID`}),` → Lovable `,_jsx(_components.code,{children:`Identity Provider Entity ID / Issuer`})]}),`\n`,_jsxs(_components.li,{children:[`Okta `,_jsx(_components.code,{children:`X509Certificate`}),` → Lovable `,_jsx(_components.code,{children:`X.509 signing certificates`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Paste the certificate value between the `,_jsx(_components.code,{children:`-----BEGIN CERTIFICATE-----`}),` and `,_jsx(_components.code,{children:`-----END CERTIFICATE-----`}),` lines.`]})}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Finish SAML provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Configure SAML provider`}),`, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of Okta as your SAML SSO provider.`]})})]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`configure-auth0-as-your-sso-provider`,children:`Configure Auth0 as your SSO provider`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`OIDC`,id:`oidc-3`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Create an application in Auth0`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Auth0 Admin Dashboard → Applications`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create application`}),`. Select the `,_jsx(_components.strong,{children:`Regular Web Applications`}),` application type.`]}),`\n`,_jsxs(_components.li,{children:[`Give the app a name, for example `,_jsx(_components.code,{children:`Lovable OIDC SSO`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create`}),`.`]}),`\n`]})}),_jsx(Step,{title:`Configure Allowed Callback URLs`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In Auth0, go to your application settings.`}),`\n`,_jsxs(_components.li,{children:[`Add the `,_jsx(_components.strong,{children:`Allowed Callback URLs`}),`: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),`.`]}),`\n`]})}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsxs(_components.p,{children:[`In Auth0, copy the following values from the `,_jsx(_components.strong,{children:`Settings`}),` tab and enter them in Lovable.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Auth0 `,_jsx(_components.code,{children:`Domain`}),` → Lovable `,_jsx(_components.code,{children:`OIDC Issuer URL / Discovery Endpoint`}),` (include `,_jsx(_components.code,{children:`https://`}),`)`]}),`\n`,_jsxs(_components.li,{children:[`Auth0 `,_jsx(_components.code,{children:`Client ID`}),` → Lovable `,_jsx(_components.code,{children:`OAuth Client ID / Application ID`})]}),`\n`,_jsxs(_components.li,{children:[`Auth0 `,_jsx(_components.code,{children:`Client Secret`}),` → Lovable `,_jsx(_components.code,{children:`OAuth Client Secret`})]}),`\n`,_jsxs(_components.li,{children:[`Optionally, the date the client secret expires → Lovable `,_jsx(_components.code,{children:`Client secret expiration (optional)`})]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Test the configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Test configuration`}),`. Lovable checks the issuer, client ID, and client secret and shows the outcome on the `,_jsx(_components.strong,{children:`Test results`}),` screen. Fix anything it reports, then click `,_jsx(_components.strong,{children:`Configure provider`}),`.`]})}),_jsx(Step,{title:`Finish OIDC provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of Auth0 as your OIDC SSO provider.`]})})]})}),_jsx(Tab,{title:`SAML`,id:`saml-3`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Create an application in Auth0`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Auth0 Admin Dashboard → Applications.`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create application`}),`. Select the `,_jsx(_components.strong,{children:`Regular Web Applications`}),` application type.`]}),`\n`,_jsxs(_components.li,{children:[`Give the app a name, for example `,_jsx(_components.code,{children:`Lovable SAML SSO`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create`}),`.`]}),`\n`]})}),_jsx(Step,{title:`Configure Allowed Callback URLs`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In Auth0, go to your application settings.`}),`\n`,_jsxs(_components.li,{children:[`Add the `,_jsx(_components.strong,{children:`Allowed Callback URLs`}),`: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),`.`]}),`\n`]})}),_jsxs(Step,{title:`Configure SAML2 Web App Add-on`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In Auth0, navigate to `,_jsx(_components.strong,{children:`Addons`}),`, and enable `,_jsx(_components.strong,{children:`SAML2 Web app`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Addon: SAML2 Web app → Settings`}),`, set:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Application Callback URL: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`Settings: paste the following `,_jsx(_components.code,{children:`mappings`}),` JSON`]}),`\n`]}),`\n`]}),`\n`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mappings\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"email\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"nameIdentifierFormat\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`]})})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Enable.`})]}),`\n`]})]}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsx(_components.p,{children:`In Lovable, choose between quick SAML provider setup or manual configuration:`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: Quick setup - import from metadata URL`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Auth0 → Addon: SAML2 Web app → Usage`}),`, locate the `,_jsx(_components.strong,{children:`Identity Provider Metadata`}),`, and click the arrow icon to get the URL.`]}),`\n`,_jsxs(_components.li,{children:[`In Lovable, paste the metadata URL in `,_jsx(_components.strong,{children:`Quick setup: import from metadata URL`}),` field.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Test \u0026 import`}),` to automatically populate the required fields below.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Manual configuration`})}),_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Auth0 → Addon: SAML2 Web app → Usage`}),`, copy the following `,_jsx(_components.strong,{children:`SAML Protocol Configuration Parameter`}),` values and enter them in Lovable.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Auth0 `,_jsx(_components.code,{children:`Identity Provider Login URL`}),` → Lovable `,_jsx(_components.code,{children:`SAML SSO Sign-on URL (from your IdP)`})]}),`\n`,_jsxs(_components.li,{children:[`Auth0 `,_jsx(_components.code,{children:`Issuer`}),` → Lovable `,_jsx(_components.code,{children:`Identity Provider Entity ID / Issuer`})]}),`\n`,_jsxs(_components.li,{children:[`Auth0 `,_jsx(_components.code,{children:`Identity Provider Certificate`}),` (`,_jsx(_components.code,{children:`X509Certificate`}),`) → Lovable `,_jsx(_components.code,{children:`X.509 signing certificates`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Download Auth0 certificate and copy the `,_jsx(_components.code,{children:`X509Certificate`}),` value. Paste the certificate value between the `,_jsx(_components.code,{children:`-----BEGIN CERTIFICATE-----`}),` and `,_jsx(_components.code,{children:`-----END CERTIFICATE-----`}),` lines.`]})}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Finish SAML provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Configure SAML provider`}),`, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of Auth0 as your SAML SSO provider.`]})})]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`configure-microsoft-entra-id-as-your-sso-provider`,children:`Configure Microsoft Entra ID as your SSO provider`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`OIDC`,id:`oidc-4`,children:[_jsx(Info,{children:_jsxs(_components.p,{children:[`Microsoft publishes its own walkthrough of this integration, `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/entra/identity/saas-apps/lovable-oidc-tutorial`,children:`Configure Lovable (OIDC) for Single sign-on with Microsoft Entra ID`}),`, which covers the same setup as the steps below.`]})}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Add the Lovable app in Microsoft Entra ID`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.a,{href:`https://entra.microsoft.com`,children:`Microsoft Entra admin center`}),`, go to `,_jsx(_components.strong,{children:`Entra ID → Enterprise apps → New application`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Add from the gallery`}),` section, search for `,_jsx(_components.strong,{children:`Lovable`}),`, select it in the results, and add it to your tenant.`]}),`\n`,_jsxs(_components.li,{children:[`Open the app, go to `,_jsx(_components.strong,{children:`Single sign-on`}),`, and select `,_jsx(_components.strong,{children:`Go to application`}),` to open the app’s registration.`]}),`\n`]}),_jsx(Note,{children:_jsx(_components.p,{children:`Adding Lovable from the gallery replaces creating your own app registration. You still add the redirect URI, grant the permissions, and create a client secret in the steps below.`})})]}),_jsxs(Step,{title:`Add the Lovable redirect URI`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In the app’s registration, go to `,_jsx(_components.strong,{children:`Authentication`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Redirect URIs`}),`, add `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Configure`}),`.`]}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`The URL must match exactly, including the `,_jsx(_components.code,{children:`https://`}),` protocol.`]})})]}),_jsxs(Step,{title:`Configure the optional claims`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In Microsoft Entra, go to `,_jsx(_components.strong,{children:`Token configuration → Add optional claim`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`ID token`}),` and add the `,_jsx(_components.code,{children:`email`}),` claim.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add`}),`.`]}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Lovable requires an email address in the ID token and has no fallback to the user principal name (UPN), so login fails for users whose token carries no `,_jsx(_components.code,{children:`email`}),` claim.`]})})]}),_jsx(Step,{title:`Configure the API permissions`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In Microsoft Entra, go to `,_jsx(_components.strong,{children:`API permissions`}),`, and check that the `,_jsx(_components.strong,{children:`Microsoft Graph`}),` delegated permissions Lovable needs are listed:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`email`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`openid`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.code,{children:`profile`})}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`To add any that are missing, click `,_jsx(_components.strong,{children:`Add a permission → Microsoft Graph → Delegated permissions`}),`, select them, then click `,_jsx(_components.strong,{children:`Add permissions`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Grant admin consent`}),`.`]}),`\n`]})}),_jsx(Step,{title:`Create a client secret`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In Microsoft Entra, go to `,_jsx(_components.strong,{children:`Certificates \u0026 secrets → Client secrets → New client secret`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Enter a description, choose an expiry, and click `,_jsx(_components.strong,{children:`Add`}),`. Note the expiration date so you can record it in Lovable.`]}),`\n`,_jsxs(_components.li,{children:[`Copy the secret `,_jsx(_components.strong,{children:`Value`}),` immediately. It isn’t shown again after you leave the page.`]}),`\n`]})}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsx(_components.p,{children:`In Lovable, enter the following:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`OIDC Issuer URL / Discovery Endpoint`}),`: format the URL as `,_jsx(_components.code,{children:`https://login.microsoftonline.com/{TENANT_ID}/v2.0`}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Replace the `,_jsx(_components.code,{children:`{TENANT_ID}`}),` with the `,_jsx(_components.strong,{children:`Directory (tenant) ID`}),` from the `,_jsx(_components.strong,{children:`Overview`}),` page in Microsoft Entra.`]})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Microsoft Entra `,_jsx(_components.code,{children:`Application (Client) ID`}),`, from the `,_jsx(_components.strong,{children:`Overview`}),` page → Lovable `,_jsx(_components.code,{children:`OAuth Client ID / Application ID`})]}),`\n`,_jsxs(_components.li,{children:[`The Microsoft Entra `,_jsx(_components.code,{children:`Client secret`}),` value you copied → Lovable `,_jsx(_components.code,{children:`OAuth Client Secret`})]}),`\n`,_jsxs(_components.li,{children:[`Optionally, the date the client secret expires → Lovable `,_jsx(_components.code,{children:`Client secret expiration (optional)`})]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Test the configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Test configuration`}),`. Lovable checks the issuer, client ID, and client secret and shows the outcome on the `,_jsx(_components.strong,{children:`Test results`}),` screen. Fix anything it reports, then click `,_jsx(_components.strong,{children:`Configure provider`}),`.`]})}),_jsx(Step,{title:`Finish OIDC provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of Microsoft Entra ID as your OIDC SSO provider.`]})})]})]}),_jsx(Tab,{title:`SAML`,id:`saml-4`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Create an enterprise app in Microsoft Entra ID`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Microsoft Entra ID admin center → Enterprise applications`}),`, and select `,_jsx(_components.strong,{children:`New application`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Create your own application`}),` and choose `,_jsx(_components.strong,{children:`Integrate any other application you don’t find in the gallery (Non-gallery)`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Give the app a name, for example `,_jsx(_components.code,{children:`Lovable SAML SSO`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create`}),`. Your application is now created.`]}),`\n`]})}),_jsxs(Step,{title:`Configure SAML SSO`,children:[_jsxs(_components.p,{children:[`In Microsoft Entra, navigate to the `,_jsx(_components.strong,{children:`Single sign-on`}),` setup page and select `,_jsx(_components.strong,{children:`SAML`}),`. Under `,_jsx(_components.strong,{children:`Basic SAML Configuration`}),`, enter the following:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Identifier (Entity ID): `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`Reply URL (Assertion Consumer Service URL): `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`]}),_jsxs(_components.p,{children:[`Leave the other values blank and select `,_jsx(_components.strong,{children:`Save`}),`.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`To let users log in to Lovable from the Microsoft `,_jsx(_components.strong,{children:`My Apps`}),` portal, add a second `,_jsx(_components.strong,{children:`Reply URL (Assertion Consumer Service URL)`}),`: `,_jsx(_components.code,{children:`https://api.lovable.dev/sso/saml/idp-consume`}),`, and select it as the `,_jsx(_components.strong,{children:`Default`}),` reply URL. See `,_jsx(_components.a,{href:`#set-up-idp-initiated-login-saml`,children:`Set up IdP-initiated login (SAML)`}),` for requirements.`]})})]}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsx(_components.p,{children:`When the application is set up in Microsoft Entra, you can choose between quick SAML provider setup or manual configuration in Lovable.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: Quick setup - import from metadata URL`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In Microsoft Entra, go to `,_jsx(_components.strong,{children:`SAML Certificates`}),` and copy the `,_jsx(_components.strong,{children:`App Federation Metadata URL`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In Lovable, paste the `,_jsx(_components.strong,{children:`App Federation Metadata URL`}),` in `,_jsx(_components.strong,{children:`Quick setup: import from metadata URL`}),` field.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Test \u0026 import`}),` to automatically populate the required fields below.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Manual configuration`})}),_jsx(_components.p,{children:`Copy the following values in Microsoft Entra and enter them in Lovable.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Microsoft Entra `,_jsx(_components.code,{children:`Login URL`}),` → Lovable `,_jsx(_components.code,{children:`SAML SSO Sign-on URL (from your IdP)`})]}),`\n`,_jsxs(_components.li,{children:[`Microsoft Entra `,_jsx(_components.code,{children:`Microsoft Entra Identifier`}),` → Lovable `,_jsx(_components.code,{children:`Identity Provider Entity ID / Issuer`})]}),`\n`,_jsxs(_components.li,{children:[`Microsoft Entra `,_jsx(_components.code,{children:`X509Certificate`}),` → Lovable `,_jsx(_components.code,{children:`X.509 signing certificates`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`You can download the certificate (Base 64) or open the `,_jsx(_components.code,{children:`App Federation Metadata URL`}),` in a new tab and copy the `,_jsx(_components.code,{children:`X509Certificate`}),` value. Paste the certificate value between the `,_jsx(_components.code,{children:`-----BEGIN CERTIFICATE-----`}),` and `,_jsx(_components.code,{children:`-----END CERTIFICATE-----`}),` lines.`]})}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Finish SAML provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Configure SAML provider`}),`, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of Microsoft Entra ID as your SAML SSO provider.`]})})]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`configure-other-providers`,children:`Configure other providers`}),`\n`,_jsx(_components.p,{children:`You can configure any OIDC or SAML-compliant provider with Lovable SSO.`}),`\n`,_jsxs(_components.p,{children:[`Before you begin, complete `,_jsx(_components.a,{href:`#start-sso-setup-in-lovable`,children:`Start SSO setup in Lovable`}),` to get the settings and values you need to use in your IdP.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`OIDC`,id:`oidc-5`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Provider mapping`})}),_jsx(_components.p,{children:`Common field names across providers:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Redirect URI: `,_jsx(_components.code,{children:`Callback URL`}),`, `,_jsx(_components.code,{children:`Sign-in redirect URI`})]}),`\n`,_jsxs(_components.li,{children:[`Issuer/Domain: `,_jsx(_components.code,{children:`Issuer URL`}),`, `,_jsx(_components.code,{children:`Authority`}),`, `,_jsx(_components.code,{children:`Okta domain`}),`, `,_jsx(_components.code,{children:`Auth0 domain`}),`, `,_jsx(_components.code,{children:`Tenant domain`})]}),`\n`,_jsxs(_components.li,{children:[`Client credentials: `,_jsx(_components.code,{children:`Client ID`}),` and `,_jsx(_components.code,{children:`Client Secret`})]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Steps`})}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create an OIDC confidential app`,children:_jsx(_components.p,{children:`Create a new OIDC Web application in your identity provider.`})}),_jsx(Step,{title:`Configure redirect URI`,children:_jsxs(_components.p,{children:[`In Redirect/Callback URLs, add `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]})}),_jsx(Step,{title:`Enable required scopes`,children:_jsxs(_components.p,{children:[`Ensure `,_jsx(_components.code,{children:`openid`}),` and `,_jsx(_components.code,{children:`email`}),` scopes are enabled and consented if needed.`]})}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsx(_components.p,{children:`In your IdP, locate the corresponding values and enter them in Lovable:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Domain`}),` or `,_jsx(_components.code,{children:`Issuer URL`}),` → Lovable `,_jsx(_components.code,{children:`OIDC Issuer URL / Discovery Endpoint`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Client ID`}),` → Lovable `,_jsx(_components.code,{children:`OAuth Client ID / Application ID`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Client Secret`}),` → Lovable `,_jsx(_components.code,{children:`OAuth Client Secret`})]}),`\n`,_jsxs(_components.li,{children:[`Optionally, the date the client secret expires → Lovable `,_jsx(_components.code,{children:`Client secret expiration (optional)`})]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Test the configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Test configuration`}),`. Lovable checks the issuer, client ID, and client secret and shows the outcome on the `,_jsx(_components.strong,{children:`Test results`}),` screen. Fix anything it reports, then click `,_jsx(_components.strong,{children:`Configure provider`}),`.`]})}),_jsx(Step,{title:`Finish OIDC provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of your OIDC SSO provider.`]})})]})]}),_jsxs(Tab,{title:`SAML`,id:`saml-5`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Provider mapping`})}),_jsx(_components.p,{children:`Common field names across providers:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`ACS URL: `,_jsx(_components.code,{children:`Single Sign-On URL`}),`, `,_jsx(_components.code,{children:`SSO URL`}),`, `,_jsx(_components.code,{children:`Reply URL`}),`, `,_jsx(_components.code,{children:`Assertion Consumer Service URL`})]}),`\n`,_jsxs(_components.li,{children:[`Audience: `,_jsx(_components.code,{children:`SP Entity ID`}),`, `,_jsx(_components.code,{children:`Audience URI`}),`, `,_jsx(_components.code,{children:`Identifier`})]}),`\n`,_jsxs(_components.li,{children:[`Attribute mapping: `,_jsx(_components.code,{children:`Attribute Statements`}),`, `,_jsx(_components.code,{children:`User Attributes \u0026 Claims`})]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Steps`})}),_jsxs(Steps,{children:[_jsx(Step,{title:`Create a SAML 2.0 application`,children:_jsx(_components.p,{children:`Create a new SAML 2.0 application in your provider.`})}),_jsx(Step,{title:`Configure endpoints`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`ACS URL: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`,_jsxs(_components.li,{children:[`Audience / Entity ID: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`})]}),`\n`]})}),_jsx(Step,{title:`Map attributes`,children:_jsxs(_components.p,{children:[`Ensure `,_jsx(_components.code,{children:`email`}),` is included in the SAML assertion. `,_jsx(_components.code,{children:`displayName`}),` is optional.`]})}),_jsx(Step,{title:`Assign users`,children:_jsx(_components.p,{children:`Assign the application to users/groups who should access Lovable.`})}),_jsxs(Step,{title:`Provide Lovable with your IdP information`,children:[_jsx(_components.p,{children:`In Lovable, choose between quick SAML provider setup or manual configuration:`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 1: Quick setup - import from metadata URL`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`In your IdP, locate your SAML metadata URL (typically found in the SAML application settings or metadata details)`}),`\n`,_jsxs(_components.li,{children:[`In Lovable, paste the metadata URL in `,_jsx(_components.strong,{children:`Quick setup: import from metadata URL`}),` field.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Test \u0026 import`}),` to automatically populate the required fields below.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option 2: Manual configuration`})}),_jsx(_components.p,{children:`In your IdP, locate the corresponding values and enter them in Lovable:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Login URL`}),` → Lovable `,_jsx(_components.code,{children:`SAML SSO Sign-on URL (from your IdP)`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Identifier/Issuer/Entity ID`}),` → Lovable `,_jsx(_components.code,{children:`Identity Provider Entity ID / Issuer`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`X509Certificate`}),` → Lovable `,_jsx(_components.code,{children:`X.509 signing certificates`})]}),`\n`]})]}),_jsxs(Step,{title:`Configure the display name and login URL`,children:[_jsx(_components.p,{children:`In Lovable, fill in the remaining fields:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Display Name`}),`: The name shown to users during authentication.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verified domain`}),`: The verified domain your login URL is based on. Lovable preselects it when you have only one.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Login URL suffix (optional)`}),`: An addition to the login URL, for example `,_jsx(_components.code,{children:`engineering`}),`. Lovable shows the resulting URL below the field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]}),`\n`]})]}),_jsx(Step,{title:`Finish SAML provider configuration in Lovable`,children:_jsxs(_components.p,{children:[`In Lovable, click `,_jsx(_components.strong,{children:`Configure SAML provider`}),`, review the confirmation page, then click `,_jsx(_components.strong,{children:`Confirm \u0026 enable SSO`}),` to finish the configuration of your SAML SSO provider.`]})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`set-up-idp-initiated-login-saml`,children:`Set up IdP-initiated login (SAML)`}),`\n`,_jsxs(_components.p,{children:[`With `,_jsx(_components.strong,{children:`IdP-initiated SSO`}),`, users start login from your identity provider’s app portal (for example, an Okta dashboard tile or the Microsoft `,_jsx(_components.strong,{children:`My Apps`}),` portal) instead of from Lovable. IdP-initiated login is `,_jsx(_components.strong,{children:`optional`}),` and available for `,_jsx(_components.strong,{children:`SAML`}),` providers on `,_jsx(_components.strong,{children:`Business`}),` and `,_jsx(_components.strong,{children:`Enterprise`}),` plans. It requires no additional configuration in Lovable. SP-initiated login from Lovable keeps working as long as your IdP app still accepts the standard ACS URL (`,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`). If your provider has only one ACS URL field, use a dedicated app for IdP-initiated login so both flows keep working.`]}),`\n`,_jsx(Heading,{level:`3`,id:`requirements`,children:`Requirements`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A configured `,_jsx(_components.strong,{children:`SAML`}),` SSO provider. OIDC providers support SP-initiated login only.`]}),`\n`,_jsxs(_components.li,{children:[`Your workspace is the `,_jsx(_components.strong,{children:`only`}),` workspace that has verified your email domain. IdP-initiated login is disabled automatically while another workspace has the same domain verified.`]}),`\n`,_jsxs(_components.li,{children:[`Your IdP `,_jsx(_components.strong,{children:`signs`}),` the SAML response (or the assertion within it) and scopes it to the Lovable SP Entity ID (`,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`) through an Audience Restriction.`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`When a requirement is not met (for example, a second workspace verifies the same email domain), IdP-initiated login stops working and users see an error page such as `,_jsx(_components.code,{children:`Forbidden`}),` or `,_jsx(_components.code,{children:`Unauthorized`}),`. Login from Lovable is not affected, and you can switch back to SP-initiated login only at any time. See `,_jsx(_components.a,{href:`#troubleshooting`,children:`Troubleshooting`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`enable-idp-initiated-login`,children:`Enable IdP-initiated login`}),`\n`,_jsxs(_components.p,{children:[`Configure your SAML app (or a dedicated IdP-initiated app) to post the SAML response to the IdP-initiated ACS URL: `,_jsx(_components.code,{children:`https://api.lovable.dev/sso/saml/idp-consume`})]}),`\n`,_jsxs(_components.p,{children:[`Keep the SP Entity ID / Audience URI unchanged: `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`.`]}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Okta`,id:`okta`,children:_jsx(Note,{children:_jsx(_components.p,{children:`The Lovable app in the Okta App Catalog does not support IdP-initiated login yet. Its SAML settings are pre-configured and cannot be changed. For now, users logging in through Okta must start login from Lovable.`})})}),_jsx(Tab,{title:`Microsoft Entra ID`,id:`microsoft-entra-id`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In your Lovable SAML enterprise application, go to `,_jsx(_components.strong,{children:`Single sign-on → Basic SAML Configuration`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Add `,_jsx(_components.code,{children:`https://api.lovable.dev/sso/saml/idp-consume`}),` as an additional `,_jsx(_components.strong,{children:`Reply URL (Assertion Consumer Service URL)`}),` and select it as the `,_jsx(_components.strong,{children:`Default`}),` reply URL. Microsoft Entra sends IdP-initiated responses to the default reply URL.`]}),`\n`,_jsxs(_components.li,{children:[`Keep the `,_jsx(_components.strong,{children:`Identifier (Entity ID)`}),` as `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`, and select `,_jsx(_components.strong,{children:`Save`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Users can now log in to Lovable from the `,_jsx(_components.strong,{children:`My Apps`}),` portal.`]}),`\n`]})}),_jsx(Tab,{title:`Auth0 and other providers`,id:`auth0-and-other-providers`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In your SAML application, set the ACS URL used for IdP-initiated login to `,_jsx(_components.code,{children:`https://api.lovable.dev/sso/saml/idp-consume`}),`. Providers also call this field `,_jsx(_components.strong,{children:`Single sign-on URL`}),`, `,_jsx(_components.strong,{children:`Reply URL`}),`, or `,_jsx(_components.strong,{children:`Assertion Consumer Service URL`}),`. In Auth0, it is the `,_jsx(_components.strong,{children:`Application Callback URL`}),` in the `,_jsx(_components.strong,{children:`SAML2 Web App`}),` addon. The addon has a single callback URL, so create a dedicated Auth0 application for IdP-initiated login.`]}),`\n`,_jsxs(_components.li,{children:[`Keep the Audience / Entity ID as `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`.`]}),`\n`,_jsx(_components.li,{children:`Make sure your provider signs SAML responses or assertions.`}),`\n`]})})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`IdP-initiated login is optional. If it does not work for your setup, point your SAML app back to `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`. This disables IdP-initiated login, and users log in from Lovable as usual. See `,_jsx(_components.a,{href:`#troubleshooting`,children:`Troubleshooting`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`map-idp-groups-to-workspace-roles`,children:`Map IdP groups to workspace roles`}),`\n`,_jsxs(_components.p,{children:[`You can map the groups your identity provider sends in its login claims to Lovable workspace roles, so people receive the right role automatically, and optionally restrict SSO login to mapped groups only. Mappings can also add members to your workspace `,_jsx(_components.a,{href:`/features/groups`,children:`groups`}),`. See `,_jsx(_components.a,{href:`#add-members-to-workspace-groups-automatically`,children:`Add members to workspace groups automatically`}),`. Group mappings work with both OIDC and SAML providers on `,_jsx(_components.strong,{children:`Business`}),` and `,_jsx(_components.strong,{children:`Enterprise`}),` plans.`]}),`\n`,_jsxs(_components.p,{children:[`To manage group mappings, go to `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) and find `,_jsx(_components.strong,{children:`Provisioning groups`}),`. If you have multiple SSO providers, use the section for the provider you want to configure. There you can:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Map an IdP group to a workspace role.`}),` Click `,_jsx(_components.strong,{children:`Add group`}),`. In `,_jsx(_components.strong,{children:`Add provisioning group`}),`, enter the `,_jsx(_components.strong,{children:`Group name`}),` exactly as your IdP sends it, then choose a `,_jsx(_components.strong,{children:`Default role`}),`: `,_jsx(_components.strong,{children:`Viewer`}),`, `,_jsx(_components.strong,{children:`Editor`}),`, or `,_jsx(_components.strong,{children:`Admin`}),`. Workspace owners can also select `,_jsx(_components.strong,{children:`Owner`}),`. Click `,_jsx(_components.strong,{children:`Add`}),`. Users whose login includes a matching group claim get that role when they join. Claims must match mappings exactly, including capitalization. If several mapped groups match, the highest-privilege role wins.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enable Group restriction.`}),` While it is disabled, matched users get their group’s role and everyone else logs in with the provider’s `,_jsx(_components.strong,{children:`Default role for new members`}),` (`,_jsx(_components.strong,{children:`Editor`}),` if you haven’t changed it). While it is enabled, only users whose IdP group matches one of your mappings can log in through the provider. Everyone else is denied.`]}),`\n`]}),`\n`,_jsxs(Note,{children:[_jsxs(_components.p,{children:[`Your IdP must include group information in its login claims for mappings to match. See `,_jsx(_components.a,{href:`#send-group-claims-from-your-idp`,children:`Send group claims from your IdP`}),`.`]}),_jsxs(_components.p,{children:[`Role mapping and group membership sync also require `,_jsx(_components.a,{href:`/features/workspace-identity#sso-login`,children:`SSO login (JIT) provisioning`}),` to be enabled. With JIT disabled, matched users log in without receiving a mapped role or group membership. `,_jsx(_components.strong,{children:`Group restriction`}),` applies either way.`]})]}),`\n`,_jsx(Heading,{level:`3`,id:`add-members-to-workspace-groups-automatically`,children:`Add members to workspace groups automatically`}),`\n`,_jsxs(_components.p,{children:[`Group mappings also provision group membership. When a user logs in through SSO with a group claim that matches a mapping, Lovable adds the user to the workspace `,_jsx(_components.a,{href:`/features/groups`,children:`group`}),` with the same name as that mapping.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Groups are matched by name.`}),` To add members to an existing Lovable group, enter its exact name in `,_jsx(_components.strong,{children:`Group name`}),`, including capitalization.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Lovable creates the group if it does not exist.`}),` The first matching login creates a workspace group named after the mapping and adds the user to it. Groups control access to projects, folders, and published apps, so review what a new group can access in `,_jsx(_components.a,{href:`https://lovable.dev/settings/groups`,children:`Groups`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Groups`}),`). Unmapped group claims never create groups.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SCIM-managed groups are the exception.`}),` If your workspace groups come from `,_jsx(_components.a,{href:`/features/business/scim`,children:`SCIM provisioning`}),`, Lovable does not create groups from login claims.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Membership is only added, never removed.`}),` Lovable does not remove anyone from a group based on login claims. Remove members from groups yourself if needed. To manage the full group lifecycle from your IdP, including removals, use `,_jsx(_components.a,{href:`/features/business/scim`,children:`SCIM provisioning`}),` on the `,_jsx(_components.strong,{children:`Enterprise`}),` plan.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`send-group-claims-from-your-idp`,children:`Send group claims from your IdP`}),`\n`,_jsxs(_components.p,{children:[`Lovable reads groups from a claim named `,_jsx(_components.code,{children:`groups`}),` in the login response, for both OIDC and SAML providers. The default SAML group claim names used by Microsoft Entra ID (`,_jsx(_components.code,{children:`http://schemas.microsoft.com/ws/2008/06/identity/claims/groups`}),`) and AD FS (`,_jsx(_components.code,{children:`http://schemas.xmlsoap.org/claims/Group`}),`) are also recognized, so you can keep those defaults.`]}),`\n`,_jsxs(_components.p,{children:[`The claim must contain group `,_jsx(_components.strong,{children:`names`}),`, not group IDs. Send names as multiple attribute values, or as a single value separated by commas or semicolons.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Okta`,id:`okta-2`,children:[_jsxs(_components.p,{children:[`Configure the group claim on your Lovable app in the `,_jsx(_components.strong,{children:`Okta Admin Console`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`SAML`})}),_jsx(_components.p,{children:`Where the group attribute is configured depends on how you added the Lovable app:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`App Catalog app`}),`: the app’s SAML settings are pre-configured and cannot be edited. Open the app’s `,_jsx(_components.strong,{children:`Sign On`}),` tab and look for a `,_jsx(_components.strong,{children:`Group Attribute Statements`}),` section there. If the app doesn’t offer one, it cannot send group claims: use the Lovable OIDC app instead, or create a custom SAML app following `,_jsx(_components.a,{href:`#configure-other-providers`,children:`Configure other providers`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Custom SAML app`}),`: open the app’s `,_jsx(_components.strong,{children:`General`}),` tab and click `,_jsx(_components.strong,{children:`Edit`}),` under `,_jsx(_components.strong,{children:`SAML Settings`}),`.`]}),`\n`]}),_jsx(_components.p,{children:`Add a group attribute statement with:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Name: `,_jsx(_components.code,{children:`groups`})]}),`\n`,_jsxs(_components.li,{children:[`Name format: `,_jsx(_components.code,{children:`Unspecified`})]}),`\n`,_jsxs(_components.li,{children:[`Filter: a filter matching the groups to send, for example `,_jsx(_components.strong,{children:`Matches regex`}),` `,_jsx(_components.code,{children:`.*`}),` to send all of the user’s groups.`]}),`\n`]}),_jsx(_components.p,{children:`Save your changes.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`OIDC`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Open your Lovable OIDC app and go to the `,_jsx(_components.strong,{children:`Sign On`}),` tab.`]}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`OpenID Connect ID Token`}),`, click `,_jsx(_components.strong,{children:`Edit`}),` and set `,_jsx(_components.strong,{children:`Groups claim type`}),` to `,_jsx(_components.strong,{children:`Filter`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Set the groups claim name to `,_jsx(_components.code,{children:`groups`}),` with a filter matching the groups to send, for example `,_jsx(_components.strong,{children:`Matches regex`}),` `,_jsx(_components.code,{children:`.*`}),`.`]}),`\n`,_jsx(_components.li,{children:`Save your changes.`}),`\n`]}),_jsx(_components.p,{children:`Okta sends group names in the claim, so values match your mappings as long as the names line up.`})]}),_jsxs(Tab,{title:`Microsoft Entra ID`,id:`microsoft-entra-id-2`,children:[_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In your Lovable enterprise application, go to `,_jsx(_components.strong,{children:`Single sign-on → Attributes \u0026 Claims → Edit`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add a group claim`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Choose which groups to include. `,_jsx(_components.strong,{children:`Groups assigned to the application`}),` is recommended: it sends only the groups assigned to the Lovable app and avoids token size limits.`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.strong,{children:`Source attribute`}),` to an option that emits group `,_jsx(_components.strong,{children:`names`}),`, such as `,_jsx(_components.strong,{children:`Cloud-only group display names`}),`, or `,_jsx(_components.code,{children:`sAMAccountName`}),` for groups synced from on-premises Active Directory.`]}),`\n`,_jsx(_components.li,{children:`Save the claim. You can keep the default claim name: Lovable recognizes Microsoft Entra’s default group claim.`}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`By default, Microsoft Entra ID sends group `,_jsx(_components.strong,{children:`object IDs`}),` (GUIDs) instead of names. Object IDs never match name-based mappings, so make sure the claim’s source attribute emits group names.`]})})]}),_jsx(Tab,{title:`Other providers`,id:`other-providers`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`In your SAML or OIDC application, include a group attribute or claim named `,_jsx(_components.code,{children:`groups`}),` in the login response.`]}),`\n`,_jsxs(_components.li,{children:[`Make sure the values are group `,_jsx(_components.strong,{children:`names`}),` (not IDs) and cover the groups you mapped in Lovable.`]}),`\n`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`manage-an-existing-sso-provider`,children:`Manage an existing SSO provider`}),`\n`,_jsxs(_components.p,{children:[`Workspace owners and admins can change a provider’s settings without deleting it. Go to `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) and click the provider in the `,_jsx(_components.strong,{children:`SSO providers`}),` section. The provider dialog includes these tabs:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`General`}),`: the `,_jsx(_components.strong,{children:`Display name`}),`, the `,_jsx(_components.strong,{children:`Login URL`}),` suffix, and the `,_jsx(_components.strong,{children:`Default role for new members`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Connection`}),`: the settings Lovable uses to verify sign-ins from your identity provider. For SAML, the `,_jsx(_components.strong,{children:`Identity provider entity ID`}),`, the `,_jsx(_components.strong,{children:`Sign-on URL`}),`, and the `,_jsx(_components.strong,{children:`Signing certificates`}),`. For OIDC, the `,_jsx(_components.strong,{children:`Client ID`}),`, the `,_jsx(_components.strong,{children:`Issuer`}),`, and a new `,_jsx(_components.strong,{children:`Client secret`}),` with its expiration date. A new entity ID, client ID, or issuer moves the provider to a different identity provider. See `,_jsx(_components.a,{href:`#move-to-a-new-identity-provider`,children:`Move to a new identity provider`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enterprise-managed authentication`}),`: enable, update, or disable access to Lovable from Claude through this provider. See `,_jsx(_components.a,{href:`/features/enterprise-managed-auth`,children:`Set up enterprise-managed authentication`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Manage group mappings and `,_jsx(_components.strong,{children:`Group restriction`}),` under `,_jsx(_components.strong,{children:`Provisioning groups`}),` on the `,_jsx(_components.strong,{children:`Identity`}),` page. See `,_jsx(_components.a,{href:`#map-idp-groups-to-workspace-roles`,children:`Map IdP groups to workspace roles`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Your changes take effect when you click `,_jsx(_components.strong,{children:`Save changes`}),`. Before Lovable saves a change on the `,_jsx(_components.strong,{children:`Connection`}),` tab, it checks the values. For SAML, Lovable validates the sign-on URL and reads every certificate. For OIDC, Lovable contacts your provider to check the new client secret. If a check fails, Lovable shows the error and keeps the current configuration. If Lovable cannot reach your provider, or your provider does not support checking a secret in advance, Lovable saves the new secret and shows a warning that it could not check the secret. Your provider then checks the secret at the next login. Each saved connection change appears in the `,_jsx(_components.a,{href:`/features/audit-logs`,children:`audit log`}),` as `,_jsx(_components.code,{children:`SSO connection updated`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`move-to-a-new-identity-provider`,children:`Move to a new identity provider`}),`\n`,_jsxs(_components.p,{children:[`When your workspace moves to a different identity provider, edit the existing SSO provider instead of deleting it. Editing keeps the settings that deleting disables, such as `,_jsx(_components.strong,{children:`Enforce SSO`}),`, `,_jsx(_components.a,{href:`/features/business/scim`,children:`SCIM provisioning`}),`, and the `,_jsx(_components.a,{href:`/features/workspace-identity#restrict-a-domain-to-sso-domain-lock`,children:`domain lock`}),`.`]}),`\n`,_jsx(_components.p,{children:`Members keep their accounts, but each account stays linked to the old identity provider. A member cannot log in through the new provider until that link is removed.`}),`\n`,_jsxs(_components.p,{children:[`Members with another login method can unlink the old provider in `,_jsx(_components.a,{href:`https://lovable.dev/settings/account#linked-accounts`,children:`Account settings → Account → Login methods`}),`. For members who log in only with SSO, contact Lovable support to remove the link.`]}),`\n`,_jsxs(_components.p,{children:[`Before you move the provider, delete its `,_jsx(_components.a,{href:`#map-idp-groups-to-workspace-roles`,children:`IdP group role mappings`}),` and disable `,_jsx(_components.a,{href:`/features/enterprise-managed-auth`,children:`enterprise-managed authentication`}),` for it. Both were set up for the old identity provider, so Lovable shows an error and does not save the move while either is still in place.`]}),`\n`,_jsxs(_components.p,{children:[`To move the provider, click it in the `,_jsx(_components.strong,{children:`SSO providers`}),` section of `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`). On the `,_jsx(_components.strong,{children:`Connection`}),` tab, enter the new provider’s details:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SAML`}),`: the new `,_jsx(_components.strong,{children:`Identity provider entity ID`}),`, and the new provider’s signing certificate under `,_jsx(_components.strong,{children:`Add a certificate`}),`. When you save, Lovable removes the current certificates and no longer accepts sign-ins signed by the old provider.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`OIDC`}),`: the new `,_jsx(_components.strong,{children:`Client ID`}),`, the new `,_jsx(_components.strong,{children:`Issuer`}),`, or both, and the new provider’s `,_jsx(_components.strong,{children:`Client secret`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`When you save, Lovable asks you to confirm the change.`}),`\n`,_jsxs(_components.p,{children:[`You cannot change a provider between SAML and OIDC. A workspace has one SSO provider, so to change the protocol, delete the provider and set up a new one. See `,_jsx(_components.a,{href:`#delete-an-sso-provider`,children:`Delete an SSO provider`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`rotate-a-saml-signing-certificate`,children:`Rotate a SAML signing certificate`}),`\n`,_jsxs(_components.p,{children:[`You can add up to 10 signing certificates to a SAML provider, and Lovable accepts sign-ins signed with any of them. When your identity provider issues a new signing certificate, paste it under `,_jsx(_components.strong,{children:`Add a certificate`}),` on the `,_jsx(_components.strong,{children:`Connection`}),` tab before your provider starts using it, so login continues without interruption. Remove the old certificate with its delete icon after the switch. Each certificate shows its subject, fingerprint, and expiration date. Lovable warns when a certificate expires within 30 days and does not save a change that leaves only expired certificates.`]}),`\n`,_jsxs(_components.p,{children:[`During setup, `,_jsx(_components.strong,{children:`Test \u0026 import`}),` from your metadata URL adds the signing certificates listed in your metadata.`]}),`\n`,_jsx(Heading,{level:`3`,id:`track-the-oidc-client-secret-expiration`,children:`Track the OIDC client secret expiration`}),`\n`,_jsxs(_components.p,{children:[`Your identity provider does not share the expiration date of an OIDC client secret with Lovable, so you record it yourself. During setup, choose `,_jsx(_components.strong,{children:`3 months`}),`, `,_jsx(_components.strong,{children:`6 months`}),`, `,_jsx(_components.strong,{children:`12 months`}),`, `,_jsx(_components.strong,{children:`Custom`}),`, or `,_jsx(_components.strong,{children:`No expiration`}),` under `,_jsx(_components.strong,{children:`Client secret expiration (optional)`}),`. When you enter a new client secret on the `,_jsx(_components.strong,{children:`Connection`}),` tab, choose from the same options under `,_jsx(_components.strong,{children:`New secret expiration (optional)`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`A badge next to the client secret on the `,_jsx(_components.strong,{children:`Connection`}),` tab shows its status:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Valid until`}),` and the date, while more than 30 days remain.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Expires in`}),` and the number of days, during the last 30 days.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Expires today`}),`, on the expiration date.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Expired`}),` and the date, after the expiration date has passed.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Lovable does not send a notification before a secret expires. Check the badge when you plan to create a new secret. When you enter a new secret without a date, Lovable clears the stored expiration date.`}),`\n`,_jsx(Heading,{level:`2`,id:`delete-an-sso-provider`,children:`Delete an SSO provider`}),`\n`,_jsxs(_components.p,{children:[`To change a provider’s sign-on URL, certificates, client secret, or identity provider, edit it instead of deleting it. See `,_jsx(_components.a,{href:`#manage-an-existing-sso-provider`,children:`Manage an existing SSO provider`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`To remove your workspace SSO provider, go to `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`), find the provider in the `,_jsx(_components.strong,{children:`SSO providers`}),` section, and click its delete icon.`]}),`\n`,_jsxs(_components.p,{children:[`Because a workspace can have only one SSO provider, deleting it turns off SSO for the workspace. Lovable shows a `,_jsx(_components.strong,{children:`Delete SSO provider`}),` confirmation dialog that lists what else it disables, based on your workspace’s current configuration:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Turn off Enforce SSO`}),`: members can use the workspace again without an SSO session.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Remove SCIM provisioning`}),`: the SCIM API key is revoked and SCIM-managed groups are deleted. Existing workspace members are not removed. See `,_jsx(_components.a,{href:`/features/business/scim`,children:`Set up SCIM user provisioning`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Disable this workspace’s domain lock`}),`: people with emails on your `,_jsx(_components.a,{href:`/features/verified-domains`,children:`verified domains`}),` can create their own workspaces again, unless another workspace still locks the domain.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Delete `,_jsx(_components.em,{children:`n`}),` IdP group role mappings`]}),`, where `,_jsx(_components.em,{children:`n`}),` is your number of mappings: IdP groups no longer grant workspace roles on login.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The dialog lists each of these only when it applies to your workspace. Click `,_jsx(_components.strong,{children:`Delete provider`}),` to confirm.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Deleting a provider cannot be undone. To use SSO again, you need to configure the provider again from the beginning. Lovable does not keep the previous configuration.`})}),`\n`,_jsxs(_components.p,{children:[`Members keep their workspace access after the provider is deleted. Members whose `,_jsx(_components.strong,{children:`only`}),` login method was that provider can recover their account themselves at the next login. See `,_jsx(_components.a,{href:`#recover-access-after-an-sso-provider-is-removed`,children:`Recover access after an SSO provider is removed`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Each side effect is recorded in the `,_jsx(_components.a,{href:`/features/audit-logs`,children:`audit log`}),`: both the `,_jsx(_components.code,{children:`SSO provider removed`}),` entry (with the exact settings that were turned off) and, when SCIM was configured, a separate `,_jsx(_components.code,{children:`SCIM disabled`}),` entry.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`OIDC`,id:`oidc-6`,children:_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Invalid or mismatched Redirect URI`,id:`invalid-or-mismatched-redirect-uri`,children:_jsxs(_components.p,{children:[`Ensure the redirect/callback URL exactly matches `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),` in your IdP.`]})}),_jsxs(Accordion,{title:`Issuer URL / discovery fails`,id:`issuer-url-discovery-fails`,children:[_jsx(_components.p,{children:`Use the provider’s OIDC Issuer URL, not only the domain.`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`For Okta, copy from the `,_jsx(_components.strong,{children:`Sign-on`}),` tab`]}),`\n`,_jsx(_components.li,{children:`For Auth0, use your tenant domain.`}),`\n`]})]}),_jsx(Accordion,{title:`Email not returned`,id:`email-not-returned`,children:_jsxs(_components.p,{children:[`Grant the `,_jsx(_components.code,{children:`email`}),` scope and ensure the user account has a primary email.`]})}),_jsx(Accordion,{title:`Authorization flow issues`,id:`authorization-flow-issues`,children:_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`Authorization Code`}),` with a confidential client and client secret. Avoid implicit or PKCE-only app types.`]})}),_jsx(Accordion,{title:`Login stops working after the client secret expires`,id:`login-stops-working-after-the-client-secret-expires`,children:_jsxs(_components.p,{children:[`Create a new client secret in your identity provider, then enter it on the provider’s `,_jsx(_components.strong,{children:`Connection`}),` tab in Lovable and record its expiration date. See `,_jsx(_components.a,{href:`#track-the-oidc-client-secret-expiration`,children:`Track the OIDC client secret expiration`}),`.`]})})]})}),_jsx(Tab,{title:`SAML`,id:`saml-6`,children:_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Invalid ACS or Audience`,id:`invalid-acs-or-audience`,children:_jsxs(_components.p,{children:[`Ensure both ACS and Audience/Entity ID exactly match `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),` in your IdP.`]})}),_jsxs(Accordion,{title:`Email claim missing`,id:`email-claim-missing`,children:[_jsx(_components.p,{children:`Make sure to map an email claim.`}),_jsxs(_components.p,{children:[`For Microsoft Entra ID, map `,_jsx(_components.code,{children:`email`}),` to `,_jsx(_components.code,{children:`user.mail`}),`. If `,_jsx(_components.code,{children:`user.mail`}),` is empty, use `,_jsx(_components.code,{children:`user.userprincipalname`}),`.`]})]}),_jsx(Accordion,{title:`Provider credentials invalid`,id:`provider-credentials-invalid`,children:_jsxs(_components.p,{children:[`Paste the correct `,_jsx(_components.code,{children:`X.509`}),` certificate. If your identity provider rotates its certificate, add the new one on the provider’s `,_jsx(_components.strong,{children:`Connection`}),` tab. See `,_jsx(_components.a,{href:`#rotate-a-saml-signing-certificate`,children:`Rotate a SAML signing certificate`}),`.`]})}),_jsxs(Accordion,{title:`Group mappings don't match`,id:`group-mappings-dont-match`,children:[_jsxs(_components.p,{children:[`If users get the default role instead of their mapped role, or `,_jsx(_components.strong,{children:`Group restriction`}),` denies people it shouldn’t:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Make sure the assertion includes a group attribute named `,_jsx(_components.code,{children:`groups`}),` (Microsoft Entra ID’s and AD FS’s default group claim names also work). See `,_jsx(_components.a,{href:`#send-group-claims-from-your-idp`,children:`Send group claims from your IdP`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Make sure the claim contains group `,_jsx(_components.strong,{children:`names`}),`, not IDs. Microsoft Entra ID sends object IDs unless the group claim’s source attribute is set to emit names.`]}),`\n`,_jsxs(_components.li,{children:[`Claim matching is `,_jsx(_components.strong,{children:`case-sensitive`}),`, so the value your IdP sends must match your mapping exactly, including capitalization.`]}),`\n`,_jsxs(_components.li,{children:[`Make sure `,_jsx(_components.a,{href:`/features/workspace-identity#sso-login`,children:`SSO login (JIT) provisioning`}),` is enabled. With it disabled, users log in without receiving mapped roles or group memberships.`]}),`\n`]})]}),_jsxs(Accordion,{title:`IdP-initiated login fails or shows an error page`,id:`idp-initiated-login-fails-or-shows-an-error-page`,children:[_jsxs(_components.p,{children:[`If starting login from your IdP’s app portal shows an error page (for example, `,_jsx(_components.code,{children:`Forbidden`}),` or `,_jsx(_components.code,{children:`Unauthorized`}),`):`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Make sure your email domain is verified in `,_jsx(_components.strong,{children:`only one`}),` Lovable workspace. IdP-initiated login is disabled automatically while more than one workspace has verified the same domain.`]}),`\n`,_jsxs(_components.li,{children:[`Make sure your IdP signs the SAML response (or the assertion within it) and the Audience Restriction matches `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`.`]}),`\n`,_jsx(_components.li,{children:`If your provider restricts access by group, make sure the user’s SAML assertion includes a matching group claim. This also applies when logging in from Lovable.`}),`\n`,_jsxs(_components.li,{children:[`If login still fails, change the ACS URL in your IdP app back to `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`. This disables IdP-initiated login and restores SP-initiated login from Lovable. IdP-initiated login is optional, so you can stay on SP-initiated login only and try again when the requirements are met.`]}),`\n`]})]})]})})]}),`\n`,_jsx(AccordionGroup,{children:_jsxs(Accordion,{title:`Recover access after an SSO provider is removed`,id:`recover-access-after-an-sso-provider-is-removed`,children:[_jsx(_components.p,{children:`Workspace members who only ever logged in through the deleted SSO provider can recover access themselves from the standard Lovable login page, with no admin action or support request required. When they enter their email on the login page, Lovable detects that their only login method was the removed provider and shows a recovery panel:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`If the workspace has a replacement SSO provider on the same verified domain,`}),` the panel shows `,_jsx(_components.strong,{children:`Reconnect your account`}),` with a login button for the new provider. Clicking it logs the user in with that provider and links the new identity to their existing account, so their projects, roles, and history are preserved. If linking cannot happen automatically (for example, the new provider does not verify the same email), the panel falls back to the password path below.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`If there is no replacement SSO provider,`}),` the panel shows `,_jsx(_components.strong,{children:`Set a password for your account`}),` and offers to email a link. The user opens the link, sets a password, and logs in with email and password from then on.`]}),`\n`]}),_jsx(_components.p,{children:`Users with any other working login method (password, Google, GitHub, Apple, or another still-valid SSO provider) are not affected and continue to log in normally.`})]})}),`\n`,_jsx(Heading,{level:`2`,id:`faq`,children:`FAQ`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`I already have an account, but I'm joining a business workspace that uses SSO. How do I log in?`,id:`i-already-have-an-account-but-i-m-joining-a-business-workspace-that-uses-sso-how-do-i-log-in`,children:[_jsxs(_components.p,{children:[`If you created your account using another login method (such as email and password, Google, or GitHub), you need to log in that way `,_jsx(_components.strong,{children:`first`}),`. When you’re logged in, go to `,_jsx(_components.a,{href:`https://lovable.dev/settings/account#linked-accounts`,children:_jsx(_components.strong,{children:`Account settings → Account → Login methods`})}),` and click `,_jsx(_components.strong,{children:`Link account`}),` under `,_jsx(_components.strong,{children:`Link company account`}),`, then log in with your company SSO. This links your existing account to your company SSO.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Important:`}),` If you attempt to log in with SSO before linking your existing account, you’ll see an error. This is a security measure to prevent unauthorized access. Log in using your original method first to complete the linking process.`]})})]}),_jsxs(Accordion,{title:`Can members who log in with SSO use 'Forgot password?' on the login page?`,id:`can-members-who-log-in-with-sso-use-forgot-password-on-the-login-page`,children:[_jsxs(_components.p,{children:[`No. `,_jsx(_components.strong,{children:`Forgot password?`}),` only works for accounts that have an email and password login method.`]}),_jsxs(_components.p,{children:[`If your account logs in through `,_jsx(_components.strong,{children:`Google`}),`, `,_jsx(_components.strong,{children:`GitHub`}),`, `,_jsx(_components.strong,{children:`Apple`}),`, or a `,_jsx(_components.strong,{children:`SAML/OIDC SSO`}),` provider, Lovable does not send a password reset email and shows a `,_jsx(_components.strong,{children:`Password reset unavailable`}),` message, because completing a reset would add a password to an account that is meant to log in through your provider. Reset your credentials with your identity provider instead (for example, `,_jsx(_components.a,{href:`https://accounts.google.com`,children:`Google Account recovery`}),` or your company IdP).`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Exception for deleted SSO providers:`}),` if your only login method was an SSO provider that has since been removed from your workspace, you can set a password for the first time through the recovery flow on the login page. See `,_jsx(_components.a,{href:`#recover-access-after-an-sso-provider-is-removed`,children:`Recover access after an SSO provider is removed`}),`.`]})})]}),_jsx(Accordion,{title:`Which SSO providers does Lovable support?`,id:`which-sso-providers-does-lovable-support`,children:_jsx(_components.p,{children:`Lovable supports the industry-standard OIDC and SAML protocols, so you can integrate with any SSO provider that supports them.`})}),_jsx(Accordion,{title:`Does Lovable support multiple SSO providers per workspace?`,id:`does-lovable-support-multiple-sso-providers-per-workspace`,children:_jsxs(_components.p,{children:[`No. A workspace can have `,_jsx(_components.strong,{children:`one active SSO provider`}),` configured at a time.`]})}),_jsxs(Accordion,{title:`Can I enforce SSO for my workspace?`,id:`can-i-enforce-sso-for-my-workspace`,children:[_jsxs(_components.p,{children:[`Yes. The workspace `,_jsx(_components.strong,{children:`owner`}),` or `,_jsx(_components.strong,{children:`admin`}),` can enable `,_jsx(_components.strong,{children:`Enforce SSO`}),` in `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) and choose the `,_jsx(_components.strong,{children:`Session duration`}),` that sets how long users stay logged in before Lovable requires a new SSO login (8 hours, 24 hours, 48 hours, or 7 days).`]}),_jsxs(_components.p,{children:[`All workspace members must then log in through SSO. When you enable it, Lovable asks whether to remove external collaborators from your projects. Invite links keep working only for people whose email is on one of your verified domains. See `,_jsx(_components.a,{href:`#enforce-sso`,children:`Enforce SSO`}),`.`]}),_jsxs(_components.p,{children:[`Test an SSO login first. For six hours after you add a provider, the `,_jsx(_components.strong,{children:`Enforce SSO`}),` toggle stays disabled and shows `,_jsx(_components.strong,{children:`Wait 6 hours and test SSO login before enforcing SSO`}),`.`]})]}),_jsxs(Accordion,{title:`Does Lovable support IdP-initiated SSO?`,id:`does-lovable-support-idp-initiated-sso`,children:[_jsxs(_components.p,{children:[`Yes. `,_jsx(_components.strong,{children:`SAML`}),` providers can optionally enable IdP-initiated login: users start login from your IdP’s app portal once your SAML app posts the SAML response to `,_jsx(_components.code,{children:`https://api.lovable.dev/sso/saml/idp-consume`}),`. It only works while your workspace is the only workspace that has verified your email domain, and SP-initiated login from Lovable keeps working either way. See `,_jsx(_components.a,{href:`#set-up-idp-initiated-login-saml`,children:`Set up IdP-initiated login (SAML)`}),`.`]}),_jsxs(_components.p,{children:[`OIDC providers support `,_jsx(_components.strong,{children:`SP-initiated login only`}),`: users must start login from Lovable.`]})]}),_jsxs(Accordion,{title:`What should I do if IdP-initiated login shows an error?`,id:`what-should-i-do-if-idp-initiated-login-shows-an-error`,children:[_jsxs(_components.p,{children:[`An error page such as `,_jsx(_components.code,{children:`Forbidden`}),` or `,_jsx(_components.code,{children:`Unauthorized`}),` means the `,_jsx(_components.a,{href:`#set-up-idp-initiated-login-saml`,children:`requirements`}),` are not met. First, make sure your email domain is verified in `,_jsx(_components.strong,{children:`only one`}),` Lovable workspace. IdP-initiated login is disabled automatically while more than one workspace has verified the same domain.`]}),_jsxs(_components.p,{children:[`If login still fails, change the ACS URL in your IdP app back to `,_jsx(_components.code,{children:`https://auth.lovable.dev/__/auth/handler`}),`. IdP-initiated login is optional: users log in from Lovable as usual, and you can try again when the requirements are met.`]})]}),_jsxs(Accordion,{title:`Does Lovable support just-in-time (JIT) provisioning with SSO?`,id:`does-lovable-support-just-in-time-jit-provisioning-with-sso`,children:[_jsxs(_components.p,{children:[`Yes, Lovable supports `,_jsx(_components.strong,{children:`JIT (just-in-time) provisioning`}),` through SSO. User accounts are created automatically the first time someone logs in via SSO, and they’re added to your company workspace.`]}),_jsxs(_components.p,{children:[`You can also set the provider’s `,_jsx(_components.strong,{children:`Default role for new members`}),` (`,_jsx(_components.strong,{children:`Viewer`}),`, `,_jsx(_components.strong,{children:`Editor`}),`, or `,_jsx(_components.strong,{children:`Admin`}),`), which applies when users join via SSO for the first time. If you don’t change it, JIT-created users join as an `,_jsx(_components.strong,{children:`Editor`}),`.`]}),_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Enterprise`}),` plans, workspace owners and admins can enable or disable SSO JIT from the `,_jsx(_components.strong,{children:`SSO login`}),` row in `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity → User provisioning`}),`). The toggle appears once an SSO provider is configured.`]}),_jsxs(_components.p,{children:[`On `,_jsx(_components.strong,{children:`Business`}),` plans, SSO JIT is automatically enabled when an SSO provider is configured, and the row shows a read-only `,_jsx(_components.strong,{children:`Enabled`}),` or `,_jsx(_components.strong,{children:`Disabled`}),` status. Contact Lovable support if you need it changed. See `,_jsx(_components.a,{href:`/features/workspace-identity`,children:`Manage workspace identity and user provisioning`}),` for how the provisioning options work together.`]})]}),_jsxs(Accordion,{title:`What happens to existing members when I set up group mappings?`,id:`what-happens-to-existing-members-when-i-set-up-group-mappings`,children:[_jsx(_components.p,{children:`Existing members keep their current role. Lovable applies group-to-role mappings when someone joins the workspace through SSO. If several mapped groups match, the highest-privilege role wins.`}),_jsxs(_components.p,{children:[`On each SSO login, members are also added to any `,_jsx(_components.a,{href:`/features/groups`,children:`workspace groups`}),` whose names match their IdP group claims. Lovable never removes anyone from a group automatically. Remove members from groups yourself if needed.`]}),_jsxs(_components.p,{children:[`Enabling `,_jsx(_components.strong,{children:`Group restriction`}),` affects existing members: anyone logging in through the provider without a matching group claim is denied, so make sure your mappings cover everyone who should keep access. See `,_jsx(_components.a,{href:`#map-idp-groups-to-workspace-roles`,children:`Map IdP groups to workspace roles`}),`.`]})]}),_jsx(Accordion,{title:`Does Lovable create workspace groups from IdP group claims?`,id:`does-lovable-create-workspace-groups-from-idp-group-claims`,children:_jsxs(_components.p,{children:[`Yes, for mapped groups. When a login matches a mapping and your workspace has no `,_jsx(_components.a,{href:`/features/groups`,children:`group`}),` with that name, Lovable creates the group and adds the user to it. Unmapped group claims never create groups, and Lovable does not create groups from login claims when your workspace groups come from SCIM provisioning. See `,_jsx(_components.a,{href:`#add-members-to-workspace-groups-automatically`,children:`Add members to workspace groups automatically`}),`.`]})}),_jsxs(Accordion,{title:`Does Lovable support SCIM or automatic user provisioning?`,id:`does-lovable-support-scim-or-automatic-user-provisioning`,children:[_jsxs(_components.p,{children:[`Yes. Lovable supports `,_jsx(_components.strong,{children:`SCIM provisioning`}),` for automated user provisioning and deprovisioning on the `,_jsx(_components.strong,{children:`Enterprise plan`}),`.`]}),_jsx(_components.p,{children:`With SCIM, user creation, removal, and role assignment are managed centrally from your identity provider based on assignments and group membership.`}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/features/business/scim`,children:`Set up SCIM user provisioning`}),` for more information.`]})]}),_jsxs(Accordion,{title:`How can I find my tenant ID (SSO login identifier)?`,id:`how-can-i-find-my-tenant-id-sso-login-identifier`,children:[_jsxs(_components.p,{children:[`Your tenant ID is the `,_jsx(_components.code,{children:`{tenantId}`}),` value in your `,_jsx(_components.strong,{children:`SSO login URL`}),`, `,_jsx(_components.code,{children:`https://lovable.dev/sso-login/{tenantId}`}),`. It is your verified domain with dots replaced by hyphens, plus the optional `,_jsx(_components.strong,{children:`Login URL suffix`}),` you entered during setup.`]}),_jsxs(_components.p,{children:[`After setup, the full URL appears in the `,_jsx(_components.strong,{children:`SSO providers`}),` row in `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) and in the provider’s `,_jsx(_components.strong,{children:`Login URL`}),` field. See `,_jsx(_components.a,{href:`#your-sso-login-url`,children:`Your SSO login URL`}),`.`]})]}),_jsxs(Accordion,{title:`How can I edit my SSO provider configuration?`,id:`how-can-i-edit-my-sso-provider-configuration`,children:[_jsxs(_components.p,{children:[`Click the provider in `,_jsx(_components.a,{href:`https://lovable.dev/settings/identity`,children:`Identity`}),` (`,_jsx(_components.strong,{children:`Workspace settings → Access → Identity`}),`) to open its settings. On the `,_jsx(_components.strong,{children:`General`}),` tab you can change the `,_jsx(_components.strong,{children:`Display name`}),`, the `,_jsx(_components.strong,{children:`Login URL`}),` suffix, and the `,_jsx(_components.strong,{children:`Default role for new members`}),`, then click `,_jsx(_components.strong,{children:`Save changes`}),`. The `,_jsx(_components.strong,{children:`Connection`}),` tab lets you change the SAML sign-on URL and signing certificates, or enter a new OIDC client secret and its expiration date. Manage group mappings and `,_jsx(_components.strong,{children:`Group restriction`}),` under `,_jsx(_components.strong,{children:`Provisioning groups`}),` on the `,_jsx(_components.strong,{children:`Identity`}),` page.`]}),_jsxs(_components.p,{children:[`Use the `,_jsx(_components.strong,{children:`Enterprise-managed authentication`}),` tab to `,_jsx(_components.a,{href:`/features/enterprise-managed-auth`,children:`manage access from Claude`}),`.`]}),_jsxs(_components.p,{children:[`To move to a new identity provider, change the entity ID, issuer, or client ID on the `,_jsx(_components.strong,{children:`Connection`}),` tab. See `,_jsx(_components.a,{href:`#move-to-a-new-identity-provider`,children:`Move to a new identity provider`}),`.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Deleting the provider also turns off Enforce SSO, removes SCIM provisioning (revoking the SCIM API key and deleting SCIM-managed groups), disables the verified-domain lock, and deletes any IdP group role mappings. The delete dialog lists exactly which of these apply before you confirm. See `,_jsx(_components.a,{href:`#delete-an-sso-provider`,children:`Delete an SSO provider`}),`.`]})})]}),_jsx(Accordion,{title:`What happens to users who only logged in via SSO if we delete the provider?`,id:`what-happens-to-users-who-only-logged-in-via-sso-if-we-delete-the-provider`,children:_jsxs(_components.p,{children:[`They keep their workspace access and can recover their account themselves from the login page: either by logging in through a replacement SSO provider (Lovable links the new identity to their existing account) or by setting a password through an emailed link. See `,_jsx(_components.a,{href:`#recover-access-after-an-sso-provider-is-removed`,children:`Recover access after an SSO provider is removed`}),`.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Set up workspace single sign-on (SSO)","sidebarTitle":"Workspace SSO","description":"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.","keywords":["single sign-on","sso","SSO setup","SSO configuration","SSO integration","enterprise SSO","enforce SSO","identity provider","OIDC","SAML","Okta SSO","Auth0 SSO","Microsoft Entra ID SSO","Azure AD SSO","SSO group mapping","group claims","group-based provisioning","group restriction","IdP groups","IdP-initiated SSO","IdP-initiated SAML"],"href":"/features/business/sso"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Supported SSO protocols","slug":"supported-sso-protocols","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Start SSO setup in Lovable","slug":"start-sso-setup-in-lovable","depth":2,"children":[{"title":"IdP configuration reference","slug":"idp-configuration-reference","depth":3,"children":[]},{"title":"Your SSO login URL","slug":"your-sso-login-url","depth":3,"children":[]},{"title":"Enforce SSO","slug":"enforce-sso","depth":3,"children":[]}]},{"title":"Provider-specific setup guides","slug":"provider-specific-setup-guides","depth":2,"children":[{"title":"Configure Okta as your SSO provider","slug":"configure-okta-as-your-sso-provider","depth":3,"children":[]},{"title":"Configure Auth0 as your SSO provider","slug":"configure-auth0-as-your-sso-provider","depth":3,"children":[]},{"title":"Configure Microsoft Entra ID as your SSO provider","slug":"configure-microsoft-entra-id-as-your-sso-provider","depth":3,"children":[]}]},{"title":"Configure other providers","slug":"configure-other-providers","depth":2,"children":[]},{"title":"Set up IdP-initiated login (SAML)","slug":"set-up-idp-initiated-login-saml","depth":2,"children":[{"title":"Requirements","slug":"requirements","depth":3,"children":[]},{"title":"Enable IdP-initiated login","slug":"enable-idp-initiated-login","depth":3,"children":[]}]},{"title":"Map IdP groups to workspace roles","slug":"map-idp-groups-to-workspace-roles","depth":2,"children":[{"title":"Add members to workspace groups automatically","slug":"add-members-to-workspace-groups-automatically","depth":3,"children":[]},{"title":"Send group claims from your IdP","slug":"send-group-claims-from-your-idp","depth":3,"children":[]}]},{"title":"Manage an existing SSO provider","slug":"manage-an-existing-sso-provider","depth":2,"children":[{"title":"Move to a new identity provider","slug":"move-to-a-new-identity-provider","depth":3,"children":[]},{"title":"Rotate a SAML signing certificate","slug":"rotate-a-saml-signing-certificate","depth":3,"children":[]},{"title":"Track the OIDC client secret expiration","slug":"track-the-oidc-client-secret-expiration","depth":3,"children":[]}]},{"title":"Delete an SSO provider","slug":"delete-an-sso-provider","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"FAQ","slug":"faq","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/lovable-f9060f1e/84f62c0d01f1469d/sign-in-with-lovable-demo.js"],"subdomain":"lovable-f9060f1e","siteName":"Lovable Documentation","title":"Set up workspace single sign-on (SSO) - Lovable Documentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6ae3962568451bd92910166e","deploymentId":"672cd6fd3133ca8082eceab1","questionText":"How do I enable SSO for my workspace?","status":"active","generatedBy":"contextual","path":"features/business/sso","createdAt":"2026-10-29T18:53:25.668Z","updatedAt":"2026-10-29T18:53:25.668Z","__v":0},{"_id":"6ae3962568451bd92910166f","deploymentId":"672cd6fd3133ca8082eceab1","questionText":"Which identity providers are supported?","status":"active","generatedBy":"contextual","path":"features/business/sso","createdAt":"2026-10-29T18:53:25.668Z","updatedAt":"2026-10-29T18:53:25.668Z","__v":0},{"_id":"6ae3962568451bd929101670","deploymentId":"672cd6fd3133ca8082eceab1","questionText":"Can I use IdP-initiated login?","status":"active","generatedBy":"contextual","path":"features/business/sso","createdAt":"2026-10-29T18:53:25.668Z","updatedAt":"2026-10-29T18:53:25.668Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T18:53:20.672Z","originalFileLocation":"features/business/sso.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Lovable Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Set up workspace single sign-on (SSO) - Lovable Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Lovable Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.lovable.dev/features/business/sso\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lovable-f9060f1e.mintlify.app/assets/logo/opengraph-image.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Set up workspace single sign-on (SSO) - Lovable Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lovable-f9060f1e.mintlify.app/assets/logo/opengraph-image.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/lovable-f9060f1e/AU_uVgnksniw8mje/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Lovable Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0095FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.lovable.dev/features/business/sso\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/features/business/sso.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.lovable.dev/#organization\",\"name\":\"Lovable Documentation\",\"url\":\"https://docs.lovable.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/lovable-f9060f1e/lZT1ihBcprll2Agr/assets/logo/logoblack.svg?fit=max\u0026auto=format\u0026n=lZT1ihBcprll2Agr\u0026q=85\u0026s=8d9eafaf19f94e27f0d13ac160d54f54\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.lovable.dev#website\",\"name\":\"Lovable Documentation\",\"url\":\"https://docs.lovable.dev\",\"publisher\":{\"@id\":\"https://docs.lovable.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.lovable.dev/features/business/sso#webpage\",\"url\":\"https://docs.lovable.dev/features/business/sso\",\"name\":\"Set up workspace single sign-on (SSO)\",\"description\":\"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.\",\"dateModified\":\"2026-10-29T18:53:20.672Z\",\"isPartOf\":{\"@id\":\"https://docs.lovable.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.lovable.dev/features/business/sso#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.lovable.dev/features/business/sso#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Workspace \u0026 account\",\"item\":\"https://docs.lovable.dev/features/workspace-admin-settings\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Access\",\"item\":\"https://docs.lovable.dev/features/people\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Identity\",\"item\":\"https://docs.lovable.dev/features/workspace-identity\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Set up workspace single sign-on (SSO)\",\"item\":\"https://docs.lovable.dev/features/business/sso\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.lovable.dev/features/business/sso#article\",\"headline\":\"Set up workspace single sign-on (SSO)\",\"name\":\"Set up workspace single sign-on (SSO)\",\"description\":\"Connect Okta, Auth0, Microsoft Entra ID, or any OIDC/SAML 2.0 provider to enable secure, centralized authentication for your workspace.\",\"url\":\"https://docs.lovable.dev/features/business/sso\",\"mainEntityOfPage\":{\"@id\":\"https://docs.lovable.dev/features/business/sso#webpage\"},\"image\":\"https://docs.lovable.dev/assets/logo/opengraph-image.png\",\"dateModified\":\"2026-10-29T18:53:20.672Z\",\"keywords\":\"single sign-on, sso, SSO setup, SSO configuration, SSO integration, enterprise SSO, enforce SSO, identity provider, OIDC, SAML, Okta SSO, Auth0 SSO, Microsoft Entra ID SSO, Azure AD SSO, SSO group mapping, group claims, group-based provisioning, group restriction, IdP groups, IdP-initiated SSO, IdP-initiated SAML\",\"publisher\":{\"@id\":\"https://docs.lovable.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.lovable.dev#website\"}}]}\u003c/script>","siteName":"Lovable Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Getting started","icon":"rocket","pages":[{"title":"Welcome to Lovable","href":"/introduction/welcome"},{"title":"Create an account","href":"/introduction/create-an-account"},{"title":"Quick start","href":"/introduction/getting-started"},{"title":"Dashboard overview","href":"/introduction/dashboard-overview"},{"title":"Lovable for Enterprise","sidebarTitle":"Enterprise","href":"/introduction/lovable-for-enterprise"},{"group":"Lovable platforms","pages":[{"title":"Lovable desktop app","sidebarTitle":"Lovable desktop app","href":"/integrations/desktop-app"},{"title":"Lovable mobile app","sidebarTitle":"Lovable mobile app","href":"/integrations/lovable-mobile-app"}]},{"group":"Use Lovable from other tools","pages":[{"title":"Lovable API","sidebarTitle":"Lovable API","href":"/integrations/lovable-api"},{"title":"Lovable MCP server","sidebarTitle":"Lovable MCP server","href":"/integrations/lovable-mcp-server"},{"title":"Lovable ChatGPT app","sidebarTitle":"Lovable ChatGPT app","href":"/tips-tricks/chatgpt-app"},{"title":"Chat with Lovable in Slack","sidebarTitle":"Lovable in Slack","href":"/integrations/lovable-for-slack"},{"title":"Chat with Lovable in Telegram","sidebarTitle":"Lovable in Telegram","href":"/tips-tricks/lovable-telegram-bot"},{"title":"Build with URL","href":"/integrations/build-with-url"},{"title":"Sign in with Lovable","sidebarTitle":"Sign in with Lovable","href":"/integrations/sign-in-with-lovable"}]}]},{"group":"Build","icon":"hammer","pages":[{"group":"Projects","root":{"title":"Projects in Lovable","sidebarTitle":"Overview","href":"/features/projects/overview"},"pages":[{"title":"Find your way around the Lovable editor","sidebarTitle":"Editor","href":"/features/projects/editor"},{"title":"Work with Lovable in the project chat","sidebarTitle":"Project chat","href":"/features/projects/chat"},{"title":"Preview and test your app in Lovable","sidebarTitle":"Preview","href":"/features/projects/preview"},{"title":"Explore changes with drafts","sidebarTitle":"Drafts","href":"/features/drafts"},{"title":"View and edit your project's code","sidebarTitle":"Code editor","href":"/features/code-mode"},{"title":"Revert and restore your project with version history","sidebarTitle":"Version history","href":"/features/projects/history"},{"title":"Project settings","sidebarTitle":"Settings","href":"/features/projects/settings"},{"title":"Delete a project","href":"/features/projects/delete-project"},{"title":"Remix a project","sidebarTitle":"Remix","href":"/features/projects/remix"},{"title":"Import a project from Replit, Bolt, v0, or another tool","sidebarTitle":"Import a project","href":"/features/projects/import-project"},{"title":"Import a website into Lovable from its URL","sidebarTitle":"Import a website","href":"/features/projects/import-website"},{"title":"Upgrade a project to TanStack Start","sidebarTitle":"Upgrade to TanStack Start","href":"/features/upgrade-to-tanstack-start"},{"title":"Find and search projects","sidebarTitle":"Find a project","href":"/introduction/project-search-and-find"},{"title":"Organize projects in folders","sidebarTitle":"Folders","href":"/introduction/project-folders"}]},{"title":"Chat with Lovable across your workspace","sidebarTitle":"Chats","href":"/features/chats"},{"group":"The agent","pages":[{"title":"Discuss your app in Chat mode","sidebarTitle":"Chat mode","href":"/features/chat-mode"},{"title":"Plan a change in Plan mode","sidebarTitle":"Plan mode","href":"/features/plan-mode"},{"title":"Implement changes in Build mode","sidebarTitle":"Build mode","href":"/features/agent-mode"},{"title":"Set a goal for Lovable","sidebarTitle":"Goals","href":"/features/goal-runs"},{"title":"Subagents","sidebarTitle":"Subagents","href":"/features/subagents"}]},{"group":"Context \u0026 instructions","pages":[{"title":"Instructions","sidebarTitle":"Instructions","href":"/features/knowledge"},{"title":"Memory: what Lovable remembers as you build","sidebarTitle":"Memory","href":"/features/memory"},{"title":"Define reusable instructions with skills","sidebarTitle":"Skills","href":"/features/skills"},{"title":"Cross-project referencing","href":"/features/cross-project-referencing"}]},{"title":"Generate files and analyze data","sidebarTitle":"File generation","href":"/features/generate-files"},{"group":"Design","pages":[{"title":"Edit from the preview","sidebarTitle":"Preview toolbar","href":"/features/preview-toolbar"},{"title":"Design guidance","href":"/features/design-guidance"},{"title":"Design templates","href":"/features/business/design-templates"},{"title":"Design systems","href":"/features/design-systems"},{"title":"Use custom fonts","sidebarTitle":"Custom fonts","href":"/tips-tricks/custom-fonts"},{"title":"Use 21st.dev components in Lovable","sidebarTitle":"21st.dev","href":"/tips-tricks/21stdev"},{"title":"Bring Figma designs into Lovable","sidebarTitle":"Figma","href":"/integrations/figma"}]},{"group":"Backend","root":{"title":"Built-in backend","sidebarTitle":"Overview","href":"/features/cloud"},"pages":[{"group":"Database","root":{"title":"Database","href":"/features/database"},"pages":[{"title":"Control who can access your app's data","sidebarTitle":"Access and security","href":"/features/database-access"},{"title":"Fix a slow database and choose the right capacity","sidebarTitle":"Performance and capacity","href":"/features/database-performance"},{"title":"Back up, restore, and export your project's database","sidebarTitle":"Backups and export","href":"/features/database-backups"},{"title":"Pause, resume, or remove your project's database","sidebarTitle":"Pause, resume, and remove","href":"/features/database-pause-remove"}]},{"group":"Users \u0026 authentication","root":{"title":"Users and authentication","sidebarTitle":"Users \u0026 authentication","href":"/features/authentication"},"pages":[{"title":"Email authentication for your app","sidebarTitle":"Email auth","href":"/features/email-auth"},{"title":"Phone authentication for your app","sidebarTitle":"Phone auth","href":"/features/phone-auth"},{"title":"Add Google authentication to your app","sidebarTitle":"Google auth","href":"/features/google-auth"},{"title":"Add Apple authentication to your app","sidebarTitle":"Apple auth","href":"/features/apple-auth"},{"title":"Add Microsoft authentication to your app","sidebarTitle":"Microsoft auth","href":"/features/microsoft-auth"},{"title":"Add Sign in with Lovable to your app","sidebarTitle":"Lovable auth","href":"/features/lovable-auth"},{"title":"Add SAML single sign-on to your app","sidebarTitle":"SAML SSO (apps)","href":"/features/saml-sso"},{"title":"Add OpenID Connect (OIDC) sign-in to your app","sidebarTitle":"OIDC sign-in (apps)","href":"/features/oidc-auth"},{"title":"Reuse Lovable workspace identity in your app","sidebarTitle":"Workspace identity (apps)","href":"/features/lovable-workspace-identity-reuse"}]},{"title":"Storage","href":"/features/storage"},{"title":"Secrets","href":"/features/secrets"},{"title":"Jobs","href":"/features/jobs"},{"title":"Edge functions","href":"/features/edge-functions"},{"title":"Logs","href":"/features/logs"},{"title":"Project usage and costs","sidebarTitle":"Usage","href":"/features/project-usage"}]},{"group":"AI for your app","root":{"title":"AI features for your app","sidebarTitle":"AI for your app","href":"/features/ai"},"pages":[{"title":"Add chatbots and text generation to your app","sidebarTitle":"Chat and text","href":"/features/ai-chat"},{"title":"Let users generate and edit images in your app","sidebarTitle":"Images","href":"/features/ai-images"},{"title":"Let users generate and edit videos in your app","sidebarTitle":"Video","href":"/features/ai-video"},{"title":"Let users create music in your app","sidebarTitle":"Music","href":"/features/ai-music"},{"title":"Help users find relevant content in your app","sidebarTitle":"Search by meaning","href":"/features/ai-search"},{"title":"Automate classification, routing, and scoring in your app","sidebarTitle":"Classify and score","href":"/features/ai-decisions"},{"title":"Let users listen to your app's content","sidebarTitle":"Text to speech","href":"/features/ai-text-to-speech"},{"title":"Add transcription and voice input to your app","sidebarTitle":"Speech to text","href":"/features/ai-speech-to-text"},{"title":"Build voice assistants your users can talk to","sidebarTitle":"Live voice","href":"/features/ai-live-voice"},{"title":"Replace deprecated AI models in your app","sidebarTitle":"Deprecated models","href":"/features/ai-deprecated-models"}]},{"group":"Test your app","pages":[{"title":"Test and verify your app","sidebarTitle":"Testing tools","href":"/features/testing"},{"title":"Test your app in a browser","sidebarTitle":"Browser testing","href":"/features/browser-testing"}]},{"group":"Secure your app","root":{"title":"Security overview","href":"/features/security"},"pages":[{"title":"Project security view","sidebarTitle":"Project security view","href":"/features/security-view"},{"title":"Trust center","href":"/features/trust-center"},{"title":"Security best practices for Lovable apps","sidebarTitle":"Security best practices","href":"/tips-tricks/security-best-practices"}]},{"title":"Using npm packages","sidebarTitle":"npm packages","href":"/tips-tricks/npm-packages"},{"title":"Build secrets","tag":"ENT","href":"/features/build-secrets"},{"title":"Managed registry","tag":"ENT","href":"/features/managed-registry"}]},{"group":"Connect","icon":"plug","pages":[{"group":"Connectors","root":{"title":"Lovable connectors: Connect tools, services, and APIs","sidebarTitle":"Overview","href":"/integrations/introduction"},"pages":[{"title":"App + chat connectors: Add capabilities to your published app and your chat","sidebarTitle":"App + chat connectors","href":"/integrations/app-connectors"},{"title":"App user connectors: let your users connect their own accounts","sidebarTitle":"App user connectors","href":"/integrations/app-user-connectors"},{"title":"Create a custom connector","sidebarTitle":"Custom connectors","href":"/integrations/create-connector"},{"title":"Chat connectors: Connect your tools to Lovable using MCP servers","sidebarTitle":"Chat connectors","href":"/integrations/chat-connectors"},{"title":"Connect a custom MCP server as a chat connector","sidebarTitle":"Custom MCP servers","href":"/integrations/custom-mcp"},{"title":"MCP registries","href":"/integrations/mcp-registries"},{"title":"Manage connectors in your workspace","sidebarTitle":"Admin controls","href":"/integrations/admin-controls"},{"title":"Integration security","href":"/integrations/security"}]},{"group":"Connector catalog","pages":[{"group":"AI \u0026 search","pages":[{"title":"Connect your app to Algolia","sidebarTitle":"Algolia","href":"/integrations/algolia"},{"title":"Connect your app to Apify","sidebarTitle":"Apify","href":"/integrations/apify"},{"title":"Connect ElevenLabs to enable voice AI in your app","sidebarTitle":"ElevenLabs","href":"/integrations/eleven-labs"},{"title":"Connect Firecrawl to scrape web data for your app","sidebarTitle":"Firecrawl","href":"/integrations/firecrawl"},{"title":"Connect your app to Fireworks AI","sidebarTitle":"Fireworks AI","href":"/integrations/fireworks"},{"title":"Connect your app to Gemini Enterprise","sidebarTitle":"Gemini Enterprise","href":"/integrations/gemini-enterprise"},{"title":"Connect your app to LlamaParse Platform","sidebarTitle":"LlamaParse Platform","href":"/integrations/llamaparse"},{"title":"Connect your app to Parallel","sidebarTitle":"Parallel","href":"/integrations/parallel"},{"title":"Connect your app to Perplexity","sidebarTitle":"Perplexity","href":"/integrations/perplexity"},{"title":"Connect your app to Replicate","sidebarTitle":"Replicate","href":"/integrations/replicate"}]},{"group":"Data \u0026 databases","pages":[{"title":"Connect to Supabase","sidebarTitle":"Supabase","href":"/integrations/supabase"},{"title":"Connect your app to Amazon Redshift","sidebarTitle":"Amazon Redshift","href":"/integrations/amazon-redshift"},{"title":"Connect your app to AWS Athena","sidebarTitle":"AWS Athena","href":"/integrations/aws-athena"},{"title":"Connect your app to AWS S3","sidebarTitle":"AWS S3","href":"/integrations/aws-s3"},{"title":"Connect your app to BigQuery","sidebarTitle":"BigQuery","href":"/integrations/bigquery"},{"title":"Connect your app to ClickHouse","sidebarTitle":"ClickHouse","href":"/integrations/clickhouse"},{"title":"Connect your app to Cube","sidebarTitle":"Cube","href":"/integrations/cube"},{"title":"Connect your app to Databricks","sidebarTitle":"Databricks","href":"/integrations/databricks"},{"title":"Connect your app to the dbt Semantic Layer","sidebarTitle":"dbt Semantic Layer","href":"/integrations/dbt-semantic-layer"},{"title":"Connect your app to GoodData","sidebarTitle":"GoodData","href":"/integrations/gooddata"},{"title":"Connect your app to IBM Db2","sidebarTitle":"IBM Db2","href":"/integrations/ibm-db2"},{"title":"Connect your app to Looker","sidebarTitle":"Looker","href":"/integrations/looker"},{"title":"Connect your app to Metabase","sidebarTitle":"Metabase","href":"/integrations/metabase"},{"title":"Connect your app to Microsoft Fabric","sidebarTitle":"Microsoft Fabric","href":"/integrations/microsoft-fabric"},{"title":"Connect your app to MotherDuck","sidebarTitle":"MotherDuck","href":"/integrations/motherduck"},{"title":"Connect your app to Neon","sidebarTitle":"Neon","href":"/integrations/neon"},{"title":"Connect your app to Omni","sidebarTitle":"Omni","href":"/integrations/omni"},{"title":"Connect your app to Oracle Autonomous AI Database","sidebarTitle":"Oracle Autonomous AI Database","href":"/integrations/oracle-autonomous"},{"title":"Connect your app to Power BI","sidebarTitle":"Power BI","href":"/integrations/power-bi"},{"title":"Connect your app to Qlik Cloud","sidebarTitle":"Qlik Cloud","href":"/integrations/qlik-cloud"},{"title":"Connect your app to Snowflake","sidebarTitle":"Snowflake","href":"/integrations/snowflake"}]},{"group":"Communication \u0026 messaging","pages":[{"title":"Connect your app to Brevo","sidebarTitle":"Brevo","href":"/integrations/brevo"},{"title":"Connect your app to Discord","sidebarTitle":"Discord","href":"/integrations/discord"},{"title":"Connect your app to Firebase Cloud Messaging","sidebarTitle":"Firebase Cloud Messaging","href":"/integrations/firebase-cloud-messaging"},{"title":"Connect your app to GatewayAPI","sidebarTitle":"GatewayAPI","href":"/integrations/gatewayapi"},{"title":"Connect your app to Mailgun","sidebarTitle":"Mailgun","href":"/integrations/mailgun"},{"title":"Connect your app to Resend","sidebarTitle":"Resend","href":"/integrations/resend"},{"title":"Connect your app to Slack","sidebarTitle":"Slack","href":"/integrations/slack"},{"title":"Connect your app to Telegram","sidebarTitle":"Telegram","href":"/integrations/telegram"},{"title":"Connect your app to Twilio","sidebarTitle":"Twilio","href":"/integrations/twilio"},{"title":"Connect your app to WhatsApp Business","sidebarTitle":"WhatsApp Business","href":"/integrations/whatsapp"}]},{"group":"CRM \u0026 sales","pages":[{"title":"Connect your app to Apollo.io","sidebarTitle":"Apollo.io","href":"/integrations/apollo"},{"title":"Connect your app to Attention","sidebarTitle":"Attention","href":"/integrations/attention"},{"title":"Connect your app to Clay","sidebarTitle":"Clay","href":"/integrations/clay"},{"title":"Connect your app to Gong","sidebarTitle":"Gong","href":"/integrations/gong"},{"title":"Connect your app to HubSpot","sidebarTitle":"HubSpot","href":"/integrations/hubspot"},{"title":"Connect your app to KLIPY","sidebarTitle":"KLIPY","href":"/integrations/klipy"},{"title":"Connect your app to Pipedrive","sidebarTitle":"Pipedrive","href":"/integrations/pipedrive"},{"title":"Connect your app to Salesforce","sidebarTitle":"Salesforce","href":"/integrations/salesforce"},{"title":"Connect your app to Zendesk","sidebarTitle":"Zendesk","href":"/integrations/zendesk"},{"title":"Connect your app to Zoho CRM","sidebarTitle":"Zoho CRM","href":"/integrations/zoho-crm"}]},{"group":"Developer tools","pages":[{"title":"Connect your app to AWS API","sidebarTitle":"AWS API","href":"/integrations/aws"},{"title":"Connect your app to Azure Cloud API","sidebarTitle":"Azure Cloud API","href":"/integrations/azure"},{"title":"Connect your app to Azure Graph \u0026 Entra API","sidebarTitle":"Azure Graph \u0026 Entra API","href":"/integrations/azure-graph"},{"title":"Connect your app to Cloudflare API","sidebarTitle":"Cloudflare API","href":"/integrations/cloudflare-api"},{"title":"Connect your app to GitHub API","sidebarTitle":"GitHub API","href":"/integrations/github-api"},{"title":"Connect your app to GitLab API","sidebarTitle":"GitLab API","href":"/integrations/gitlab-api"},{"title":"Connect your app to Google Cloud API","sidebarTitle":"Google Cloud API","href":"/integrations/gcp"},{"title":"Connect your app to Inngest","sidebarTitle":"Inngest","href":"/integrations/inngest"},{"title":"Connect your app to Linear","sidebarTitle":"Linear","href":"/integrations/linear"},{"title":"Connect your app to Logo.dev","sidebarTitle":"Logo.dev","href":"/integrations/logo-dev"},{"title":"Connect your app to the Lovable API","sidebarTitle":"Lovable API connector","href":"/integrations/lovable-api-connector"},{"title":"Connect your app to n8n","sidebarTitle":"n8n","href":"/integrations/n8n"}]},{"group":"E-commerce","pages":[{"title":"Connect your app to Lightspeed","sidebarTitle":"Lightspeed","href":"/integrations/lightspeed"},{"title":"Connect your app to PrestaShop","sidebarTitle":"PrestaShop","href":"/integrations/prestashop"},{"title":"Build a Shopify store with AI","sidebarTitle":"Shopify","href":"/integrations/shopify"},{"title":"Connect your app to WooCommerce","sidebarTitle":"WooCommerce","href":"/integrations/woocommerce"}]},{"group":"Finance \u0026 accounting","pages":[{"title":"Connect your app to Lexware","sidebarTitle":"Lexware","href":"/integrations/lexware"},{"title":"Connect your app to Sevdesk","sidebarTitle":"Sevdesk","href":"/integrations/sevdesk"},{"title":"Connect your app to Wave","sidebarTitle":"Wave","href":"/integrations/wave"},{"title":"Connect your app to Xero","sidebarTitle":"Xero","href":"/integrations/xero"},{"title":"Connect your app to Zoho Books","sidebarTitle":"Zoho Books","href":"/integrations/zoho-books"}]},{"group":"Maps \u0026 location","pages":[{"title":"Connect your app to Google Maps Platform","sidebarTitle":"Google Maps Platform","href":"/integrations/google-maps"},{"title":"Connect your app to Mapbox","sidebarTitle":"Mapbox","href":"/integrations/mapbox"}]},{"group":"Marketing \u0026 social","pages":[{"title":"Connect your app to beehiiv","sidebarTitle":"beehiiv","href":"/integrations/beehiiv"},{"title":"Connect your app to Bing Webmaster Tools","sidebarTitle":"Bing Webmaster Tools","href":"/integrations/bing-webmaster-tools"},{"title":"Connect your app to Google Analytics","sidebarTitle":"Google Analytics","href":"/integrations/google-analytics"},{"title":"Connect Google Business Profile to Lovable","sidebarTitle":"Google Business Profile","href":"/integrations/google-business-profile"},{"title":"Connect your app to Google Search Console (GSC)","sidebarTitle":"Google Search Console","href":"/integrations/google-search-console"},{"title":"Connect your app to Klaviyo","sidebarTitle":"Klaviyo","href":"/integrations/klaviyo"},{"title":"Connect your app to LinkedIn","sidebarTitle":"LinkedIn","href":"/integrations/linkedin"},{"title":"Connect your app to Loops","sidebarTitle":"Loops","href":"/integrations/loops"},{"title":"Connect your app to PostHog","sidebarTitle":"PostHog","href":"/integrations/posthog"},{"title":"Connect your app to Semrush","sidebarTitle":"Semrush","href":"/integrations/semrush"},{"title":"Connect your app to TikTok","sidebarTitle":"TikTok","href":"/integrations/tiktok"},{"title":"Connect your app to Twitch","sidebarTitle":"Twitch","href":"/integrations/twitch"},{"title":"Connect your app to X (Twitter)","sidebarTitle":"X (Twitter)","href":"/integrations/x"}]},{"group":"Payments \u0026 billing","pages":[{"title":"Connect your app to Chargebee","sidebarTitle":"Chargebee","href":"/integrations/chargebee"},{"title":"Connect your app to Pledge","sidebarTitle":"Pledge","href":"/integrations/pledge"},{"title":"Connect your app to Ramp","sidebarTitle":"Ramp","href":"/integrations/ramp"},{"title":"Connect your own Stripe account","sidebarTitle":"Stripe","href":"/integrations/stripe"}]},{"group":"Productivity","pages":[{"title":"Connect your app to Airtable","sidebarTitle":"Airtable","href":"/integrations/airtable"},{"title":"Connect your app to Asana","sidebarTitle":"Asana","href":"/integrations/asana"},{"title":"Connect your app to Ashby","sidebarTitle":"Ashby","href":"/integrations/ashby"},{"title":"Connect your app to Calendly","sidebarTitle":"Calendly","href":"/integrations/calendly"},{"title":"Connect your app to Fireflies","sidebarTitle":"Fireflies","href":"/integrations/fireflies"},{"title":"Connect your app to Google Workspace","sidebarTitle":"Google Workspace","href":"/integrations/google-workspace"},{"title":"Connect your app to Granola","sidebarTitle":"Granola","href":"/integrations/granola"},{"title":"Connect your app to incident.io","sidebarTitle":"incident.io","href":"/integrations/incidentio"},{"title":"Connect your app to Microsoft 365","sidebarTitle":"Microsoft","href":"/integrations/microsoft"},{"title":"Build and publish apps to Microsoft Copilot Managed Runtime","sidebarTitle":"Copilot Managed Runtime","href":"/integrations/microsoft-copilot-managed-runtime"},{"title":"Set up your Microsoft tenant for Copilot Managed Runtime","sidebarTitle":"Copilot Managed Runtime tenant setup","href":"/integrations/microsoft-copilot-managed-runtime-tenant-setup"},{"title":"Connect your app to Notion","sidebarTitle":"Notion","href":"/integrations/notion"},{"title":"Connect your app to Scrive for e-signatures and eID","sidebarTitle":"Scrive","href":"/integrations/scrive"},{"title":"Connect your app to Tally","sidebarTitle":"Tally","href":"/integrations/tally"},{"title":"Connect your app to Workday","sidebarTitle":"Workday","href":"/integrations/workday"}]},{"group":"Security \u0026 compliance","pages":[{"title":"Run AI-powered penetration tests with Aikido","sidebarTitle":"Aikido","href":"/integrations/aikido"},{"title":"Scan your projects for vulnerabilities with Wiz","sidebarTitle":"Wiz","href":"/integrations/wiz"}]},{"group":"Websites \u0026 CMS","pages":[{"title":"Connect your app to Contentful","sidebarTitle":"Contentful","href":"/integrations/contentful"},{"title":"Connect your app to Storyblok","sidebarTitle":"Storyblok","href":"/integrations/storyblok"},{"title":"Connect your app to Wix","sidebarTitle":"Wix","href":"/integrations/wix"},{"title":"Connect your app to WordPress (self-hosted)","sidebarTitle":"WordPress (self-hosted)","href":"/integrations/wordpress"},{"title":"Connect your app to WordPress.com","sidebarTitle":"WordPress.com","href":"/integrations/wordpress-com"}]}]},{"title":"Integrate any API with Lovable","sidebarTitle":"Connect any API","href":"/integrations/any-api"},{"group":"Git sync","root":{"title":"Sync your Lovable project code with GitHub, GitLab, or Bitbucket","sidebarTitle":"Git sync overview","href":"/integrations/git-sync-overview"},"pages":[{"title":"Sync your Lovable project with GitHub","sidebarTitle":"GitHub","href":"/integrations/github"},{"title":"Sync your Lovable project with GitLab","sidebarTitle":"GitLab","href":"/integrations/gitlab"},{"title":"Sync your Lovable project with Bitbucket","sidebarTitle":"Bitbucket","href":"/integrations/bitbucket"}]}]},{"group":"Collaborate","icon":"users","pages":[{"title":"Collaboration","href":"/features/collaboration"},{"title":"Share a project with internal or external collaborators","sidebarTitle":"Share a project","href":"/features/share-project"},{"title":"Project comments","sidebarTitle":"Project comments","href":"/features/project-comments"},{"title":"Control project access","sidebarTitle":"Project access","href":"/features/project-visibility"}]},{"group":"Deploy \u0026 host","icon":"globe","pages":[{"title":"How Lovable hosts your app","sidebarTitle":"Hosting","href":"/features/hosting"},{"title":"Publish your Lovable project","sidebarTitle":"Publish","href":"/features/publish"},{"title":"Set up a custom domain","sidebarTitle":"Custom domains","href":"/features/custom-domain"},{"title":"Transfer a domain to Lovable","sidebarTitle":"Transfer a domain","href":"/features/transfer-domain"},{"title":"Publish every app in your workspace under your own domain","sidebarTitle":"Publishing domain","tag":"ENT","href":"/features/publishing-domain"},{"title":"Publish apps with branded URLs","sidebarTitle":"Branded app URLs","href":"/features/branded-workspace-urls"},{"group":"Ownership \u0026 portability","root":{"title":"Deployment, hosting, and ownership options with Lovable","sidebarTitle":"Ownership \u0026 portability","href":"/tips-tricks/deployment-hosting-ownership"},"pages":[{"title":"Deploying and hosting outside Lovable","sidebarTitle":"Host outside Lovable","href":"/tips-tricks/external-deployment-hosting"}]}]},{"group":"Grow \u0026 optimize","icon":"chart-line","pages":[{"title":"Growth tools","sidebarTitle":"Growth tools","href":"/features/growth-tools"},{"title":"Optimize your app for SEO and AI search","sidebarTitle":"SEO and AEO","href":"/features/seo-aeo"},{"title":"Analytics","sidebarTitle":"Analytics","href":"/features/analytics"},{"title":"Advertise your app","sidebarTitle":"Ads","href":"/features/ads"},{"title":"Add payments to your app","sidebarTitle":"Payments","href":"/features/payments"},{"title":"Send branded emails from your own domain","sidebarTitle":"Emails","href":"/features/custom-emails"},{"title":"Publish your app as an MCP server","sidebarTitle":"Agent integrations","href":"/features/agent-integrations"},{"title":"Project monitoring","href":"/features/project-monitoring"}]},{"group":"Workspace \u0026 account","icon":"gear","pages":[{"group":"Workspace","root":{"title":"Lovable workspace","sidebarTitle":"Workspace","href":"/features/workspace"},"pages":[{"title":"Workspace admin settings","sidebarTitle":"Admin settings","href":"/features/workspace-admin-settings"},{"title":"Show an announcement banner to your workspace","sidebarTitle":"Announcements","href":"/features/workspace-announcements"},{"title":"Insights","sidebarTitle":"Insights","href":"/features/insights"},{"title":"Delete a workspace","href":"/introduction/delete-workspace"}]},{"group":"Organizations","root":{"title":"Organizations: run several workspaces as one company","sidebarTitle":"Organizations","tag":"ENT","href":"/features/organizations"},"pages":[{"title":"Set up organization identity: domains, SSO, and SCIM","sidebarTitle":"Organization identity","tag":"ENT","href":"/features/organization-identity"},{"title":"Manage people across the workspaces in your organization","sidebarTitle":"Organization people","tag":"ENT","href":"/features/organization-people"}]},{"group":"Access","pages":[{"title":"Manage workspace members from the People tab","sidebarTitle":"People","href":"/features/people"},{"title":"Groups","href":"/features/groups"},{"group":"Identity","root":{"title":"Manage workspace identity and user provisioning","sidebarTitle":"Workspace identity","href":"/features/workspace-identity"},"pages":[{"title":"Verify a domain for your workspace","sidebarTitle":"Verified domains","description":"Prove ownership of your company's email domain with a DNS record to unlock SSO, automatic user provisioning, SCIM, and branded app URLs.","href":"/features/verified-domains"},{"title":"Set up workspace single sign-on (SSO)","sidebarTitle":"Workspace SSO","href":"/features/business/sso"},{"title":"Set up enterprise-managed authentication","sidebarTitle":"Enterprise-managed authentication","description":"Let your team use Lovable from Claude through Okta single sign-on, without a separate Lovable sign-in. Configure access, test it, and disable it.","href":"/features/enterprise-managed-auth"},{"title":"Set up SCIM user provisioning","sidebarTitle":"SCIM provisioning","tag":"ENT","href":"/features/business/scim"}]},{"title":"Create and manage API keys","sidebarTitle":"API keys","href":"/features/api-keys"},{"title":"Connect apps to Lovable with OAuth","sidebarTitle":"OAuth clients","href":"/features/oauth-clients"}]},{"group":"Security","pages":[{"title":"Privacy \u0026 security settings","sidebarTitle":"Privacy \u0026 security","href":"/features/privacy-and-security-settings"},{"title":"Workspace policies","href":"/features/workspace-policies"},{"title":"Action center","href":"/features/action-center"},{"title":"EU inference","sidebarTitle":"EU inference","tag":"ENT","href":"/features/eu-inference"},{"group":"Security center","root":{"title":"Workspace security center","sidebarTitle":"Workspace security center","href":"/features/security-center"},"pages":[{"title":"Security insights","sidebarTitle":"Security insights","href":"/features/security-insights"}]},{"title":"Audit logs","tag":"ENT","href":"/features/audit-logs"},{"group":"Data exports","root":{"title":"Export audit logs to your SIEM or cloud storage","sidebarTitle":"Data exports","tag":"ENT","href":"/features/data-exports"},"pages":[{"title":"Export Lovable logs to Amazon S3","sidebarTitle":"Amazon S3","tag":"ENT","href":"/features/data-exports-amazon-s3"},{"title":"Export Lovable logs to Azure Blob Storage","sidebarTitle":"Azure Blob Storage","tag":"ENT","href":"/features/data-exports-azure-blob-storage"},{"title":"Export Lovable logs to Azure Log Analytics","sidebarTitle":"Azure Log Analytics","tag":"ENT","href":"/features/data-exports-azure-log-analytics"},{"title":"Export Lovable logs to Google Cloud Storage","sidebarTitle":"Google Cloud Storage","tag":"ENT","href":"/features/data-exports-google-cloud-storage"},{"title":"Export Lovable logs to Splunk","sidebarTitle":"Splunk","tag":"ENT","href":"/features/data-exports-splunk"}]},{"title":"Sensitive data scanning","tag":"ENT","href":"/features/sensitive-data-scanning"},{"title":"Manage training data and privacy","sidebarTitle":"Training data and privacy","href":"/features/business/data-opt-out"}]},{"group":"Your account","root":{"title":"Account settings","href":"/introduction/lovable-account-settings"},"pages":[{"title":"Two-factor authentication (2FA)","href":"/introduction/two-factor-authentication-2-fa"},{"title":"Delete account","href":"/introduction/delete-account"}]}]},{"group":"Plans \u0026 billing","icon":"credit-card","pages":[{"title":"Subscription plans","href":"/introduction/subscription-plans"},{"title":"Change or cancel your subscription","href":"/introduction/manage-subscription"},{"title":"Invoices, payments, and billing details","sidebarTitle":"Invoices and billing","href":"/introduction/invoices-and-billing"},{"title":"Credits and usage","href":"/introduction/credits-and-usage"},{"title":"Credit top-ups","href":"/introduction/credit-top-ups"},{"title":"Usage limits and alerts","sidebarTitle":"Usage limits \u0026 alerts","href":"/features/usage-limits-and-alerts"},{"title":"Low credit balance and out-of-credits recovery","sidebarTitle":"Low balance and recovery","href":"/introduction/out-of-credits"}]},{"group":"Guides \u0026 reference","icon":"life-ring","pages":[{"group":"Guides","pages":[{"title":"How to build a real product with Lovable","sidebarTitle":"Idea to product","href":"/tips-tricks/from-idea-to-app"},{"title":"Launch your site on a custom domain","sidebarTitle":"Launch on a custom domain","href":"/tips-tricks/launch-on-a-custom-domain"},{"title":"Prompting best practices","href":"/prompting/prompting-one"},{"title":"Prompt library","href":"/prompting/prompting-library"},{"title":"Debug and improve your app","sidebarTitle":"Debug \u0026 improve","href":"/prompting/prompting-debugging"},{"title":"Edit Google Docs, Sheets, and Slides in Lovable","sidebarTitle":"Edit Google files","href":"/tips-tricks/google-workspace-editing"}]},{"title":"FAQ","href":"/introduction/faq"},{"title":"Glossary","href":"/glossary"},{"title":"Video tutorials and courses","sidebarTitle":"Videos and courses","href":"/introduction/video-tutorials"},{"title":"Support policy","href":"/introduction/support-policy"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Set up workspace single sign-on (SSO) - Lovable Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}