Microsoft Entra ID SAML SSO for Harness: End-to-End Setup, Validation, and Troubleshooting
Overview
This guide expands on the standard Harness and Microsoft documentation for customers who want a practical, end-to-end walkthrough for setting up SAML single sign-on (SSO) between Harness and Microsoft Entra ID.
The goal is to cover:
- the happy path for a clean deployment
- the exact values customers usually need to exchange between Harness and Entra
- the most common misconfigurations and troubleshooting checks
- when to use manual user creation, JIT provisioning, or SCIM provisioning
This article is intended for administrators who may not already be familiar with SAML terminology or Microsoft Entra enterprise application behavior.
Before you start
You will typically need:
- A Harness Account Admin (or equivalent access to Authentication settings)
- A Microsoft Entra administrator with one of the roles typically used for enterprise app setup, such as:
- Cloud Application Administrator
- Application Administrator
- Application Owner
- A test user that exists in Microsoft Entra ID
- At least one emergency/admin user with the right Harness permissions for Local Login
- A plan for how users will exist in Harness:
- manually invited users, or
- JIT provisioning, or
- SCIM provisioning
Important behavior to understand first
Keep Harness Local Login available as a safety net
Before enabling SAML for production use, make sure you have validated Harness Local Login access for at least one admin user.
Why this matters:
- it helps prevent an admin lockout during rollout
- it gives you a recovery path if SAML settings are incorrect
- it lets you sign in and roll back or correct authentication settings if users become blocked
Typical Local Login URL for Harness SaaS:
https://app.harness.io/auth/#/local-login
For prod-3, Harness documents:
https://app3.harness.io/auth/#/local-login
Important notes for Local Login
- Harness says Local Login signs the user into their default account
- if the user belongs to multiple Harness accounts, the default account must be correct before using Local Login
- the required admin access should be assigned directly to the user, not only through a group assignment
- Local Login can be disabled with the
DISABLE_LOCAL_LOGINfeature flag
Recommended prerequisite
Before changing SAML settings, test that your designated fallback admin can successfully access Local Login and reach the Authentication settings page.
-
SAML authentication alone does not automatically create users in Harness by default.
If you only configure SAML, users usually still need to exist in Harness first unless you also enable JIT or SCIM. -
The user identity must match between Entra and Harness.
In practice, this usually means the email address sent by Entra must match the Harness user email. -
User assignment matters in Entra.
Even if SAML is configured correctly, users who are not assigned to the Enterprise Application may not be able to launch the app. -
The default Harness Entity ID is often
app.harness.io, but some environments use a custom value.
If the customer has multiple SAML apps in the same Entra tenant, it is often better to use a unique custom Entity ID.
Recommended deployment approach
For the smoothest rollout:
- Configure SAML with one test user first
- Validate SP-initiated login
- Validate IdP-initiated login if the customer wants it
- Decide whether users will be:
- invited manually,
- provisioned with JIT, or
- provisioned with SCIM
- Expand assignment to broader user/group scope only after the test user works
How the integration works at a high level
In this integration:
- Harness acts as the Service Provider (SP)
- Microsoft Entra ID acts as the Identity Provider (IdP)
- Harness provides:
- an ACS / SAML Endpoint URL
- an Entity ID
- Entra provides:
- a Federation Metadata XML file
- the SAML assertion containing the user identity and optional claims
Harness validates the SAML response using the metadata from Entra, then maps the incoming identity to a Harness user.
Happy path: step-by-step setup
Step 1: Prepare the values from Harness
In Harness:
- Go to Account Settings.
- Open Authentication.
- Choose SAML Provider.
- Start adding a new SAML provider.
- Select Microsoft Entra ID / Azure if presented in the UI.
- Keep this page open.
From this screen, copy or note the values Harness gives you:
- SAML Endpoint URL / ACS URL
- Entity ID
- default is often
app.harness.io - use a custom Entity ID if you need a unique identifier in Entra
- default is often
When to use a custom Entity ID
Use a custom Entity ID when:
- the tenant already has another Harness enterprise app
- the customer has multiple Harness environments
- the customer wants stronger separation between environments
Whatever Entity ID you use in Entra must match what you configure in Harness.
Step 2: In Microsoft Entra ID, create the Enterprise Application
In Microsoft Entra admin center:
- Go to Enterprise applications.
- Select New application.
- Search the gallery for Harness.
- Add the application.
- Open the newly created Enterprise Application.
- Go to Single sign-on.
- Select SAML.
Note about the gallery app
Microsoft documents that the Harness gallery integration uses a fixed application identifier pattern and notes that only one instance can be configured in one tenant in the standard gallery-based scenario. If the customer needs more than one Harness SAML configuration in the same tenant, plan the Entity ID carefully and validate whether a custom setup is required.
Step 3: Configure Basic SAML Configuration in Entra
In Basic SAML Configuration, configure the following:
Identifier (Entity ID)
Use the Harness Entity ID.
Examples:
app.harness.iofor a standard SaaS setup- a custom Entity ID if the customer configured one in Harness
Reply URL (ACS URL)
Use the Harness SAML Endpoint / ACS URL copied from Harness.
Typical pattern:
https://app.harness.io/gateway/api/users/saml-login?accountId=<HARNESS_ACCOUNT_ID>
The actual value should always be copied from Harness whenever possible.
Sign-on URL
This is commonly used for SP-initiated login.
Typical value:
https://app.harness.io/
For self-managed or custom-domain environments, use the customer’s actual Harness base URL.
Practical guidance
- Reply URL is the most critical value
- Identifier must match exactly between Entra and Harness
- Sign-on URL is commonly added even if the customer mainly uses IdP-initiated login
Step 4: Configure User Attributes & Claims in Entra
This is one of the most common areas where deployments fail.
In User Attributes & Claims:
- Make sure NameID is mapped to a value Harness can match to the user
- In most environments, the safest choice is the user’s email address
Recommended setup
Use a NameID that resolves to the same email value used by the Harness user account.
Common examples:
user.mailuser.userprincipalnamewhen the UPN is the same as the user’s actual email address
Important caveat
Many customers assume userprincipalname is always the same as email. That is not always true.
Examples of where this causes problems:
- UPN is
jsmith@corp.local, but email isjohn.smith@company.com - guest/B2B users have unexpected identity formats
- synced on-prem users have legacy UPN values
Best practice
If the Harness user email is john.smith@company.com, the SAML identity coming from Entra should resolve to that same value.
Step 5: Download the Federation Metadata XML from Entra
Still in the SAML setup page in Entra:
- Go to SAML Signing Certificate
- Download Federation Metadata XML
This metadata file contains the signing certificate and IdP configuration that Harness uses to validate SAML responses.
Step 6: Upload Entra metadata into Harness
Return to the Harness SAML provider configuration:
- Upload the Federation Metadata XML downloaded from Entra
- Enter a display name for the provider if needed
- If required, add the custom Entity ID so it matches Entra
- Save / submit the provider
At this point, Harness has the metadata needed to trust SAML assertions coming from Entra.
Step 7: Assign users or groups in Entra
In the Entra Enterprise Application:
- Go to Users and groups
- Assign the test user first
- Assign groups later after validation
Why this matters
A common failure pattern is:
- SAML configuration is correct
- the user exists in Harness
- but the user was never assigned to the Enterprise Application in Entra
Result: sign-in may fail or the app may not appear where expected.
Step 8: Make sure the user exists in Harness
Choose one model:
Option A: Manual invitation
Invite the user into Harness using the same email address that Entra will send in the SAML assertion.
Option B: JIT provisioning
Enable JIT provisioning in Harness if you want users to be created when they first log in, based on a validation claim/value in the SAML assertion.
Option C: SCIM provisioning
Use SCIM if the customer wants lifecycle management from Entra to Harness, including provisioning and deprovisioning behavior.
Step 9: Test login
Recommended test order
- Use a fresh browser session or incognito window
- Test with one assigned user
- Start with SP-initiated login from Harness
- Then test IdP-initiated login from Entra/My Apps if needed
SP-initiated flow
The user starts from the Harness login page.
IdP-initiated flow
The user starts from Entra / My Apps / the Enterprise App tile.
Why incognito matters
Existing Microsoft sessions can mask issues and make it look like SSO is working differently than it really is.
Common scenarios and troubleshooting
Scenario 1: User gets redirected but cannot sign in to Harness
Common causes
- The SAML assertion identity does not match the Harness user email
- The user does not exist in Harness and JIT/SCIM is not enabled
- The user is not assigned to the Enterprise Application in Entra
What to check
- Compare the Harness user email with the NameID/email claim coming from Entra
- Confirm the user is assigned in Entra
- Confirm the user exists in Harness or that JIT/SCIM is configured
Scenario 2: NameID is set to UPN, but login still fails
Common cause
The Entra userprincipalname is not the same as the actual email address used in Harness.
Fix
Change the NameID source to a value that matches the Harness email, often user.mail, or align the Harness user identity with the actual emitted value.
Scenario 3: Customer has multiple Harness environments or multiple SAML apps in the same Entra tenant
Common cause
The default Entity ID (app.harness.io) creates ambiguity or conflicts.
Fix
Use a custom Entity ID in Harness and configure that same exact value in Entra.
Extra validation
Make sure the Reply URL also points to the correct Harness account/environment.
Scenario 4: IdP-initiated login does not work, but SP-initiated does
Common causes
- Sign-on URL is missing or not aligned with the customer environment
- The customer expects My Apps launch behavior that was never configured or tested
- The Enterprise App assignment is incomplete
What to check
- Verify Sign-on URL in Entra
- Verify the user assignment to the application
- Test from Microsoft My Apps with a clean session
Scenario 5: SP-initiated login does not work, but IdP-initiated does
Common causes
- Harness Reply URL / ACS is correct, but Sign-on URL or application launch path is wrong
- The wrong Harness environment or account is being used
- Browser session/cached login is masking path issues
What to check
- Start from the correct Harness login URL
- Validate the ACS / Reply URL in Entra matches the Harness account exactly
- Retest in incognito
Scenario 6: Users can log in, but not all expected permissions/groups show up
There are two separate concepts to distinguish:
- authentication: user can sign in
- authorization/group mapping: user permissions/groups are mapped into Harness
If the customer expects group-driven access, verify whether they are using:
- manual Harness groups
- SAML authorization/group claims
- SCIM group provisioning
Special Entra limitation
Microsoft Entra limits SAML group emission to 150 groups in a SAML assertion. If a user belongs to more than 150 groups, Entra can omit the actual groups and send a Graph reference instead.
Why that matters for Harness
If the customer depends on SAML group claims for authorization, users with large group memberships may not have groups delivered in the token as expected.
Possible path forward
If the customer uses group-based authorization and some users belong to many groups, evaluate whether they need the additional client credentials flow described in Harness documentation for retrieving group information.
Scenario 7: Test user works, but broader rollout fails
Common causes
- Only the test user was assigned to the app
- group assignment was added, but the group is not the one users actually inherit access from
- some users have different UPN/email formats
- conditional access or MFA policies apply differently to other users
What to check
- confirm assignment scope in Entra
- compare a working user and a failing user
- compare emitted claims for both users
- confirm whether guest users or synced users behave differently
Scenario 8: Customer wants users created automatically
Choose the right model
Manual invite
Best when:
- only a few users need access
- the customer wants explicit access control in Harness
JIT provisioning
Best when:
- users should be created automatically on first login
- the customer can reliably send a validation claim/value in SAML
SCIM provisioning
Best when:
- the customer wants centralized lifecycle management from Entra
- create/update/disable behavior should follow Entra assignment state
- group provisioning is also required
JIT provisioning guidance
Harness requires SAML SSO first, then JIT can be enabled. JIT uses a validation key/value pair in the SAML assertion to decide whether a first-time user should be created.
Practical tip
If JIT is enabled but users are still not being created:
- inspect whether the required claim is actually present in the SAML assertion
- check whether the claim name and value match exactly what Harness expects
- confirm the user is still otherwise allowed to access the Enterprise App
SCIM provisioning guidance
Use SCIM when the customer wants a more complete identity lifecycle approach.
Typical Entra SCIM setup for Harness uses:
- Tenant URL patterned as:
https://app.harness.io/gateway/api/scim/account/<HARNESS_ACCOUNT_ID> - a Harness API key / token for the SCIM secret
Important SCIM notes
- Start with one test user
- Use Test Connection in Entra before enabling provisioning
- Review attribute mappings carefully
- In Entra, users with Default Access can be excluded from provisioning depending on the configuration in Microsoft’s tutorial
Common validation checklist
Use this checklist when troubleshooting:
Harness side
- SAML provider exists and is enabled
- correct metadata XML uploaded
- correct Entity ID configured
- correct account/environment used
- user exists in Harness, or JIT/SCIM is enabled
Entra side
- Enterprise Application is the correct one
- SAML is the selected SSO method
- Identifier matches Harness Entity ID
- Reply URL matches Harness ACS URL exactly
- Sign-on URL is set as expected
- NameID resolves to the correct email/identity
- user is assigned to the Enterprise Application
- metadata/certificate is current
User side
- test in incognito
- verify the exact user email in Harness
- verify whether user is guest/B2B/synced/on-prem/hybrid
- verify whether group membership is unusually large
Recommended evidence to collect during troubleshooting
If login still fails, collect:
- screenshot of Basic SAML Configuration in Entra
- screenshot of User Attributes & Claims in Entra
- confirmation of the exact Harness user email
- whether the user was manually invited, JIT-provisioned, or SCIM-provisioned
- whether the user is assigned to the Enterprise Application
- whether failure occurs in SP-initiated, IdP-initiated, or both
- a HAR file or browser network trace if the customer is comfortable providing it
- SAML tracing output from a browser extension if deeper claim inspection is needed
Suggested rollout plan for customers
- Configure SAML for one test user
- Validate email/NameID matching
- Test SP-initiated flow
- Test IdP-initiated flow if required
- Decide between manual invite, JIT, or SCIM
- Roll out to a small pilot group
- Expand to broader user/group assignment
Key takeaways
- The most common root cause is identity mismatch between the SAML assertion and the Harness user email
- The second most common root cause is missing user assignment in the Entra Enterprise Application
- For customers who want automatic lifecycle management, SCIM is usually the best long-term model
- For customers with many groups, be aware of the 150-group SAML limit in Entra
- Use a custom Entity ID when the customer has multiple Harness/SAML integrations in the same tenant