Single Sign-On (SSO) Setup
Who this guide is for: Organization Owners (or members holding a custom role that grants the SSO page) who want to allow their organization’s users to sign in to EmbayLMS using their corporate identity provider (e.g., Okta, Microsoft Entra ID, Google Workspace, Ping, ADFS).
EmbayLMS supports four SSO provider types. Choose the one that matches your identity provider:
| Provider type | Protocol | Use when |
|---|---|---|
| SAML 2.0 | SAML | Your IdP supports SAML (Okta, Ping, ADFS, generic) |
| Microsoft Entra ID | OIDC | Your org uses Microsoft 365 / Azure AD |
| Google Workspace | OIDC | Your org uses Google Workspace |
| OIDC | OIDC | Any OpenID Connect–compatible IdP |
SAML 2.0 Setup
Overview
embaylms supports SAML 2.0 SP-initiated single sign-on. Once configured:
- Users click Sign in with SSO on the embaylms login page and are redirected to your identity provider (IdP).
- After authenticating with the IdP, they are returned to embaylms and signed in automatically.
- Just-in-time (JIT) provisioning (enabled by default) creates a user account on first login — no manual account creation required.
Prerequisites
- The Owner role, or a custom role that grants Settings → SSO / Identity
- Access to your identity provider’s admin console
- Your IdP must support SAML 2.0 (SP-initiated flow)
Step 1 — Get the SP (embaylms) values for your IdP
embaylms acts as the Service Provider (SP). Your IdP needs to know where to send SAML assertions. Retrieve the SP values from embaylms before configuring your IdP.
In embaylms: Navigate to Settings → User Management → SSO / Identity.
Click View SP Metadata to download the XML, or note these values manually:
| Value | Format | Where to find it |
|---|---|---|
| SP Entity ID / Audience URI | URL | Shown on the SSO settings page |
| ACS URL (Reply URL) | URL | Shown on the SSO settings page |
| SP Metadata URL | URL | https://{your-tenant}.embaylms.com/api/auth/saml/{slug}/metadata |
Tip: Most modern IdPs (Okta, Entra ID) support importing SP metadata by URL. Use the SP Metadata URL above to auto-fill all SP values in your IdP.
Step 2 — Configure your IdP
Register embaylms as a SAML application in your IdP using the SP values from Step 1. See the IdP-specific guides:
Your IdP will provide the following values once the application is created — you will need them in Step 3:
| Value | Description |
|---|---|
| IdP Entity ID / Issuer | The IdP’s identifier URI |
| IdP SSO URL | The URL embaylms redirects users to for authentication |
| IdP Certificate | PEM-encoded X.509 certificate used to sign SAML assertions |
Step 3 — Enter IdP values in embaylms
- In embaylms, navigate to Settings → User Management → SSO / Identity.
- Click Add Identity Provider.
- Select SAML 2.0 as the provider type.
- Fill in the following fields:
| Field | Description | Example |
|---|---|---|
| Entity ID (Issuer) | The IdP’s entity ID from Step 2 | https://your-org.okta.com/exk... |
| SSO URL | The IdP’s redirect URL from Step 2 | https://your-org.okta.com/app/... |
| Certificate | Paste the full PEM certificate from Step 2. The bare base64 body from your IdP’s metadata file is accepted too | -----BEGIN CERTIFICATE-----... |
| Enabled | Toggle on when ready to activate | ON |
- Click Save.
EmbayLMS reads the certificate’s expiry date when you save. A certificate that has already expired is refused with “This certificate expired on {date}” — saving it would make every SSO sign-in fail. See Step 6 for how expiry is tracked.
Step 4 — Configure JIT provisioning (optional)
Just-in-time (JIT) provisioning automatically creates a user account in embaylms the first time someone signs in via SSO — no pre-creating accounts needed.
| Setting | Description | Default |
|---|---|---|
| JIT provisioning | Create accounts on first SSO login | Enabled |
| Default role | Role assigned to JIT-provisioned users | learner |
To configure: In the IdP settings panel, expand JIT Provisioning.
Recommended roles:
learner— Standard learner access (appropriate for most organizations)instructor— Can create and manage coursesmanager— Can view team reports and manage team enrollmentsadmin— Full admin access (only use this if all SSO users should be admins)
To disable JIT (users must be manually created before their first SSO login): Toggle JIT provisioning to OFF. Users who try to sign in before being provisioned will see an “account not found” error.
Step 5 — Test the integration
- Open a private / incognito browser window (important — avoids cached sessions).
- Navigate to your embaylms login page:
https://{your-tenant}.embaylms.com/login - Click Sign in with SSO.
- You should be redirected to your IdP’s login page.
- Authenticate with a test user account.
- You should be redirected back to the embaylms dashboard.
If using JIT provisioning, the user account is automatically created on this first login.
Step 6 — Keep the signing certificate current
Your identity provider signs every SAML sign-in with its signing certificate, and that certificate has an expiry date. IdPs renew it on their own schedule (Entra ID and Okta default to 1–3 years). The day it expires, every SSO sign-in fails until the renewed certificate is pasted into EmbayLMS. In SSO-only mode that means nobody except the break-glass account can sign in.
EmbayLMS tracks the date for you:
- On the SSO page. Each SAML provider shows Signing certificate valid until {date}. From 60 days before the date, a badge counts down the days — amber until the last week, red in the last 7 days and once expired — with a line saying what to do. With SSO-only mode on, the line also warns that only the break-glass account will still be able to sign in.
- By notification. Every active Owner and Admin receives an in-app notification and an email 60, 30 and 7 days before the expiry, in their own language. Each warning is sent once per certificate. You can turn either channel off under My profile → Notifications → SSO certificate expiring (admins), and reword the email under Templates → Email.
- Embay support sees it too. Certificates expiring within 60 days appear on the Embay platform console, with SSO-only tenants flagged as a lockout risk.
To renew:
- In your IdP, create or activate the new signing certificate (Entra ID: Enterprise applications → your app → Single sign-on → SAML Certificates; Okta: Applications → your app → Sign On → SAML Signing Certificates).
- Copy the new certificate (PEM, or the base64 value from the metadata file).
- In EmbayLMS, open Settings → Single Sign-On, click Edit on the SAML provider, paste the new certificate into X.509 Certificate (PEM) and click Save configuration.
- Test a sign-in from a private browser window. The row now shows the new valid until date, and the 60 / 30 / 7-day warnings start over for it.
Timing: most IdPs keep signing with the old certificate until you activate the new one. Paste the new certificate into EmbayLMS at the same time you activate it in the IdP — before that, sign-ins are still signed with the old one.
Configuration Reference
| Setting | Description | Default |
|---|---|---|
| Provider type | Must be SAML 2.0 for SAML SSO | — |
| Entity ID (Issuer) | IdP’s entity identifier URI | Required |
| SSO URL | IdP’s redirect URL for authentication | Required |
| Certificate | IdP’s PEM X.509 signing certificate (PEM or bare base64). Refused if already expired | Required |
| Certificate expiry | Read from the certificate on save and shown on the SSO page; drives the 60 / 30 / 7-day warnings | Automatic |
| Enabled | Activates the IdP configuration | true |
| JIT provisioning | Auto-create users on first login | true |
| Default JIT role | Role for JIT-created users | learner |
Troubleshooting
Sign-in error messages
Each message below points at one specific field. The message shown on the login page tells you which.
| Message on the login page | What it means | How to fix it |
|---|---|---|
| ”SSO is not configured for your organization.” | No enabled IdP configuration exists for this portal | Settings → Single Sign-On — add a configuration, or enable the existing one |
| ”The certificate saved for your identity provider does not match the one it used to sign in.” | The stored certificate is not the key your IdP signed the response with — most often the wrong certificate was copied from the IdP, or the IdP rotated it | Re-copy the signing certificate from your IdP and update it in Settings → Single Sign-On. For Entra ID take it from the App Federation Metadata Url, not the Certificate (Base64) download — see the Entra ID guide |
| ”This sign-in came from a different identity provider than the one configured.” | The Issuer in the response does not match the Entity ID (Issuer) saved in embaylms | Copy the IdP’s issuer / Entity ID exactly as the IdP reports it |
| ”Your identity provider is set up with a different application address.” | The Identifier / Audience configured on the IdP side does not match this portal’s SP entity ID | In your IdP, set the Identifier to https://{slug}.embaylms.com/api/auth/saml/{slug}/metadata — exactly, including the path |
| ”The sign-in response expired before it reached us.” | The assertion fell outside its validity window, normally a clock difference between the IdP and the user’s device | Check the device clock. If it recurs for all users, check the IdP’s clock skew settings |
| ”This sign-in response has already been used.” | A sign-in response was submitted twice — usually a refreshed or bookmarked callback page, and occasionally a genuine replay attempt | Start the sign-in again from the login page. Repeated occurrences without user action are worth reporting |
| ”Your identity provider did not provide an email address.” | The assertion carried no email claim | Map the NameID (or an email claim) to the user’s email address in the IdP |
| ”Your account was not found.” | The user has no account and JIT provisioning is off | Enable JIT provisioning, or create the account first |
| ”Your account has been deactivated.” | The account exists but is inactive | Reactivate the user in Users |
| ”SSO authentication failed. Please try again.” | An unclassified failure | Check the sign-in again; if it persists, contact support with the approximate time of the attempt. If the SSO page shows the certificate as Expired, that is the cause — paste the current certificate (Step 6) |
Saving the configuration
| Message in the drawer | What it means | How to fix it |
|---|---|---|
| ”This certificate expired on {date}.” | The certificate you pasted is past its expiry date, so it cannot verify any sign-in | Copy the current signing certificate from your IdP — after a rotation, the old one is often still listed next to the new one |
| The SAML row shows no valid until line | The pasted text is not a readable X.509 certificate, so no expiry could be read (the configuration still saves) | Re-copy the certificate; include the BEGIN/END lines or paste the base64 body only |
“Your identity provider did not provide an email address” The SAML assertion does not include an email attribute. Ensure your IdP is configured to send the user’s email. See the attribute mapping table in the relevant IdP guide.
“Your account was not found” JIT provisioning is disabled for this IdP connection and the user does not have a pre-created account. Either:
- Enable JIT provisioning in Settings → User Management → SSO / Identity → Edit, or
- Create the user account manually in Users before they attempt SSO.
“Your account has been deactivated” The user exists in embaylms but their account is deactivated. Re-activate it in Users → [user] → Activate.
OIDC Setup (Google Workspace, Microsoft Entra ID, Generic OIDC)
OIDC providers use a discovery URL and OAuth 2.0 client credentials instead of SAML certificates.
Step 1 — Create an OAuth application in your identity provider
| Provider | Guide |
|---|---|
| Google Workspace | OIDC with Google Workspace → |
| Microsoft Entra ID | SAML with Entra ID → (also supports OIDC — contact support) |
| Generic OIDC | Use your IdP’s OAuth 2.0 / OIDC application setup |
Set the redirect URI in your IdP to:
https://{your-tenant}.embaylms.com/api/auth/oidc/{slug}/callbackYour IdP will provide a Client ID, Client Secret, and a Discovery URL (the .well-known/openid-configuration endpoint).
Step 2 — Enter values in EmbayLMS
- Navigate to Settings → User Management → SSO / Identity.
- Click Add Identity Provider.
- Select your provider type (Google Workspace, Microsoft Entra ID, or OIDC).
- Fill in:
| Field | Description |
|---|---|
| OIDC Discovery URL | The .well-known/openid-configuration URL from your IdP |
| Client ID | From your IdP’s OAuth application |
| Client Secret | From your IdP’s OAuth application |
- Configure JIT provisioning and click Save.
OIDC Discovery URLs by provider
| Provider | Discovery URL |
|---|---|
| Google Workspace | https://accounts.google.com/.well-known/openid-configuration |
| Microsoft Entra ID | https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration |
| Okta | https://{your-okta-domain}/.well-known/openid-configuration |
Managing multiple identity providers
EmbayLMS supports more than one active IdP per tenant. This is useful if you have:
- A SAML integration for most employees and a Google OIDC connection for contractors.
- A legacy SAML integration being migrated to OIDC.
All enabled IdP configurations are offered at login. Users will be redirected to whichever provider they select (or the only one if just one is enabled).
To disable an IdP without deleting it: use the toggle in Settings → User Management → SSO / Identity. This preserves the configuration for future use.