TTechclick ⚡ XP 0% All lessons
Zscaler · Identity & SSO · SAML with Microsoft Entra IDInteractive · L1 / L2 / L3

Configure SAML SSO on Zscaler with Microsoft Entra ID — ZIA & ZPA, step by step

Your office doesn't cut a new key for every door — one badge from the front desk opens them all. SAML SSO is that badge: Microsoft Entra ID checks the user once and hands Zscaler a signed "yes, this is really them." In this lesson you wire that trust both ways — for end users and for admins, on ZIA and ZPA.

📅 June 4, 2026 · ⏱ 12 min · 2 live demos · 5 infographics · 🏷 10-Q assessment + AI Tutor inline

⚡ Quick Answer

Step-by-step guide to configure SAML single sign-on between Microsoft Entra ID (Azure AD) and Zscaler — ZIA and ZPA, user and admin SSO, SCIM provisioning, certificates, and the five errors that break real logins.

🎯 By the end you will be able to

Read as:

Pick where you want to start

1

SAML in 90 seconds

The signed-badge model — IdP, SP, and the handshake.

2

ZIA user SSO

Gallery app → claims → Base64 cert → Activate.

3

ZPA user SSO + SCIM

Metadata XML upload + group provisioning.

4

Admin SSO + 5 failures

Admin login, no JIT, and the errors that bite.

🧠 Warm-up — 3 questions, no score

Just notice which ones make you pause. We answer all three inside the lesson.

1. When a user signs in with SAML, who actually checks the password and signs the proof?

Answered in SAML in 90 seconds.

2. ZIA wants the IdP signing certificate in which format?

Answered in ZIA user SSO.

3. Why can a brand-new admin authenticate at Entra yet still fail to enter the Zscaler portal?

Answered in Admin SSO + 5 failures.

Most engineers think…

"Once I turn on SAML in Zscaler, my users are protected by MFA." It feels true — you connected an enterprise IdP, so surely the strong auth came along for the ride.

Wrong. SAML only delegates who you are to Entra. MFA, Conditional Access, device-compliance checks — all of that lives in Entra policy on the Zscaler app. If you don't attach a Conditional Access policy, you've added SSO, not security. We'll prove this with a before/after diagram in Section 4.

The four words this whole lesson rides on

Tap each card. If these four click, every screen later in the lesson will make sense.

🪪
IdP
tap to flip

Identity Provider = Microsoft Entra ID. It checks the password and mints the signed assertion. So what: it's the source of truth — break it and every connected app breaks.

🛡
SP
tap to flip

Service Provider = Zscaler ZIA / ZPA. It consumes the assertion and never sees the password. So what: the SP only trusts what the certificate proves.

📜
Assertion
tap to flip

A signed XML statement: "this user is Priya, here are her attributes," passed via the browser. So what: the digital signature is the entire security model.

🔁
SCIM
tap to flip

A provisioning protocol that syncs users + groups before login. So what: SAML says who you are; SCIM says you exist and which groups you're in.

① SAML in 90 seconds: the signed-badge model

Two systems that have never met still need to agree on one thing: "this is really Priya." SAML solves that with three artifacts they exchange once, then trust forever. The IdP (Entra) authenticates the user. The SP (Zscaler) trusts the IdP and lets the user in. The password never touches Zscaler.

Those three trust anchors are the only things you actually configure, on both sides:

Figure 1 — The trust triangle: three artifacts, lose one and login dies
The SAML trust triangle between the user's browser, Microsoft Entra ID, and Zscaler Entra (the IdP) and Zscaler (the SP) exchange metadata and a signing certificate once during setup. At login, the browser carries an AuthnRequest to Entra and a signed assertion back to Zscaler. The signing certificate is the trust anchor. One setup exchange (dashed) + every login (solid). The cert is the anchor. Microsoft Entra ID IdP · signs the assertion 🔑 User's browser carries the messages Zscaler ZIA / ZPA SP · verifies signature 🛡 SETUP: metadata + signing cert → ① AuthnRequest (redirect) → ② signed assertion (the badge) ③ POST assertion to ACS → access Colour legend trusted / corporate path the signed badge / decision point access granted
Setup happens once (dashed): Entra and Zscaler swap metadata and the signing cert. Then every login is ①→②→③. Drop the cert and step ③ rejects the badge.
👉 So far: Entra = IdP (signs), Zscaler = SP (verifies), and the browser just carries messages. The three anchors are Entity ID, ACS/Reply URL, and the signing cert. Next: watch one login happen, then break it.

Pause & Predict

Before SAML, the Zscaler proxy stored each user's password. With SAML on, where does the password live now — and what does Zscaler store instead? Type your guess.

Answer: The password never touches Zscaler — it lives only in Entra. Zscaler stores just the IdP's public signing certificate and trusts any assertion signed with the matching private key. That's why a stolen cert (or an expired one) is catastrophic, while a leaked Zscaler config is not.

Zscaler's ZIA and ZPA user apps are both SP-initiated: the user lands on Zscaler first, and Zscaler bounces them to Entra. Watch the healthy path, then press Break it to see the most common failure — a certificate mismatch.

▶ SP-initiated SAML login, live

Priya opens the Zscaler portal with no session. Press Play for the healthy path, then Break it to see the failure.

① User → ZIAPriya opens admin.zscalertwo.net — no Zscaler session yet.
② ZIA → EntraZIA returns a 302 redirect carrying a SAML AuthnRequest.
③ Entra signsEntra checks password (+ Conditional Access), then signs the assertion.
④ ACS verifyBrowser POSTs to ZIA's ACS; ZIA verifies the signature → session granted.
Press Play to step through the healthy path. Then press Break it.
Figure 2 — The SP-initiated handshake, six steps left to right
Six-step SP-initiated SAML handshake from user to access User hits Zscaler, Zscaler redirects to Entra with an AuthnRequest, Entra authenticates and applies Conditional Access, Entra signs the assertion, the browser POSTs it to the ACS, and Zscaler verifies the signature and grants the session. SP-initiated: the SP asks first, the IdP answers with a signed badge ① User hits Zscaler ② ZIA → 302 AuthnRequest to Entra ③ Entra authn + CA / MFA ④ Sign 🔑 assertion ⑤ POST browser → ZIA ACS ⑥ Verify → access ⚠ Steps ③–④ are where MFA and Conditional Access actually run — not in Zscaler.
The whole login is six hops. Zscaler only does the first redirect and the last verify — everything that looks like "security" happens at Entra in steps ③–④.

② ZIA user SSO: the gallery flow, end to end

This is the most common job: let employees authenticate to the Zscaler internet-access proxy with their Entra accounts. ZIA SSO is SP-initiated and supports both JIT and SCIM provisioning. You configure two consoles: Entra first, then ZIA.

Step A — the Entra side (the IdP)

Sign in to the Microsoft Entra admin center as at least a Cloud Application Administrator, then:

  1. Entra ID → Enterprise apps → New application. Add the gallery app that matches your Zscaler cloud — e.g. Zscaler Internet Access ZSTwo for the zscalertwo.net cloud, ZSThree for zscalerthree.net, and so on. Picking the wrong cloud's app means nothing will match.
  2. Open Single sign-on → SAML. Edit Basic SAML Configuration. The Identifier (Entity ID) is a fixed string for this app, so only one instance can exist per tenant. Set the Sign-on URL to your cloud's portal (for ZSThree it is https://login.zscalerthree.net/sfc_sso).
  3. Under Attributes & Claims, confirm the extra claim memberOf = user.assignedroles so group/role data rides along.
  4. In SAML Signing Certificate, download Certificate (Base64) — this is the .pem file ZIA needs. Copy the Login URL too.
  5. Users and groups → Add user/group — assign the people (or a group) who should get access. Skip this and Entra throws AADSTS50105 at every user.
🖥️ This is the Microsoft side — Entra admin center → Enterprise applications → Zscaler Internet Access ZSTwo → Single sign-on (SAML) → Basic SAML Configuration. (Recreated for clarity — your console matches this.)
entra.microsoft.com · Enterprise applications · SAML
Basic SAML Configuration
1
Identifier (Entity ID)
https://admin.zscalertwo.net
2
Reply URL (ACS URL)
https://admin.zscalertwo.net/adminsso.do
Sign on URL
https://login.zscalertwo.net/sfc_sso
SAML Signing Certificate
3
Certificate (Base64)
⬇ Download  ·  ZscalerInternetAccess.cer (.pem)
Save

Step B — the ZIA side (the SP)

In the ZIA Admin Portal go to Administration → Authentication → Authentication Settings, set Authentication Type = SAML, then click Configure SAML and fill the dialog:

🖥️ This is the Zscaler side — ZIA Admin Portal → Administration → Authentication → Authentication Settings → Configure SAML. (Recreated for clarity — your console matches this.)
admin.zscalertwo.net · Authentication Settings · Edit SAML
SAML Portal URL
https://login.microsoftonline.com/<tenant-id>/saml2
1
Login Name Attribute
NameID
2
Public SSL Certificate
⬆ Upload  ·  ZscalerInternetAccess.pem
3
Enable SAML Auto-Provisioning
User Display Name Attribute
displayName
Group Name Attribute
memberOf
Department Name Attribute
department
Save → then Activate

Three fields decide whether this works. ① Login Name Attribute must be exactly NameID — it is case-sensitive. ② Public SSL Certificate accepts only the Base64 (.pem) file you downloaded — not the metadata XML, not a DER .cer. ③ Enable SAML Auto-Provisioning if you want ZIA to create users on first login (JIT); then the display-name, group, and department attribute fields tell ZIA which claims to read.

Before you upload, sanity-check the certificate from a shell — a bad or expired cert is the number-one reason ZIA later rejects assertions:

verify the Entra cert before uploading to ZIA
openssl x509 -in ZscalerInternetAccess.cer -noout -subject -issuer -enddate
Expected output
subject=CN = Microsoft Azure Federated SSO Certificate
issuer=CN = Microsoft Azure Federated SSO Certificate
notAfter=Jun  4 09:15:22 2029 GMT

If openssl errors with "unable to load certificate," you grabbed the wrong format — re-download Certificate (Base64). Note the notAfter date: that is the day this login silently dies unless you re-upload a fresh cert (more on that in Section 4).

👉 So far: Entra side = add the right gallery app, set URLs, grab the Base64 cert, assign users. ZIA side = SAML auth type, NameID, upload the .pem, toggle auto-provisioning. One step left that everyone forgets…

Pause & Predict

You finished the ZIA SAML form and clicked Save — but SSO still doesn't work. What single ZIA step did you forget? Type your guess.

Answer: Activation. ZIA queues every config change in a pending state. Hover the Activation menu (bottom-left) and click Activate — nothing goes live until you do. "I clicked Save and it didn't work" is almost always a missing Activate.
Quick check · Q1 of 10

Priya's ZIA tenant is on the zscalertwo.net cloud. For ZIA user SSO, which Entra gallery app and which downloaded artifact does she use?

Correct: b. The gallery app must match her cloud (ZSTwo ↔ zscalertwo.net), and ZIA consumes the Base64 (.pem) certificate. ZPA and the Administrator apps are different integrations; the metadata XML is ZPA's format, not ZIA's.

Priya at Infosys faces this

She enabled SAML on ZIA, clicked Activate, but every user now sees "SAML Authentication Failed" and bounces back to the login page.

Likely cause

She uploaded the Federation Metadata XML into the ZIA "Public SSL Certificate" field instead of the Base64 .pem. ZIA can't read the signing key, so every signature check fails.

Diagnosis

She uses a SAML-tracer browser add-on to capture the assertion and confirms the signature is valid at Entra — so the break is on the SP side, in the cert upload.

Entra → SSO → SAML Signing Certificate → Certificate (Base64)
Fix

Re-download Certificate (Base64), re-upload it as the Public SSL Certificate in ZIA, Save, and Activate again.

Verify

A test user signs in and lands on the proxy. In Analytics → Web Insights the username now resolves to the real UPN, not "unauthenticated."

Figure 3 — Four Zscaler SAML integrations, one comparison table
Comparison of the four Zscaler SAML integrations: ZIA user, ZPA user, ZIA admin, ZPA admin A table comparing the Entra gallery app, certificate artifact, Zscaler configuration path, and provisioning method for ZIA user SSO, ZPA user SSO, ZIA admin SSO and ZPA admin SSO. ZIA uses a Base64 certificate; ZPA uses Federation Metadata XML. Admin SSO has no JIT. Same protocol — different app + different cert. Pick wrong and nothing matches. Integration Entra gallery app Cert artifact Provisioning ZIA — user internet proxy Zscaler Internet Access ZSxx Certificate (Base64 / .pem) JIT + SCIM ZPA — user private apps Zscaler Private Access (ZPA) Federation Metadata XML SCIM (strongly advised) ZIA — admin portal logins …Internet Access Administrator Certificate (Base64 / .pem) manual — no JIT ZPA — admin portal logins …Private Access Administrator Federation Metadata XML manual — no JIT
The one table to memorise: ZIA → Base64 cert, ZPA → metadata XML, and admin apps never auto-create accounts. Mixing the two cert formats is the classic day-one mistake.

③ ZPA user SSO + SCIM: metadata XML and group sync

ZPA (private/ZTNA access) uses the same SAML protocol but a different artifact. Instead of a Base64 cert, ZPA imports the Federation Metadata XML, which bundles the entity ID, endpoints, and the signing cert into one file. On the Entra side the ZPA app's Identifier is https://samlsp.private.zscaler.com/auth/metadata and the Sign-on URL follows https://samlsp.private.zscaler.com/auth/login?domain=<your-domain>.

On the Zscaler side you work in the ZPA Admin Console (admin.private.zscaler.com): Administration → IdP Configuration → Add IdP Configuration. Upload the metadata XML, leave Single Sign-On = User, pick your Domains, and Save. ZPA reads the metadata and fills the rest automatically.

Quick check · Q2 of 10

For ZPA user SSO, what do you upload into the ZPA console's "Add IdP Configuration" wizard?

Correct: c. ZPA imports the Federation Metadata XML — it carries the entity ID, endpoints, and signing cert in one file. The Base64 cert is ZIA's format; the bearer token is for the separate SCIM step.

Why SAML alone isn't enough for ZPA: SCIM

ZPA access policies are almost always written against groups ("SOC-Analysts get the jump-box"). SAML proves who the user is at login, but it doesn't reliably pre-load group membership. That's SCIM's job. In the same ZPA IdP wizard, scroll to Enable SCIM Sync, click Generate New Token, and copy the Bearer Token plus the SCIM Service Provider Endpoint. Paste both into Entra's Provisioning tab (Tenant URL + Secret Token) and hit Test Connection.

▶ SCIM provisioning, live

Why a group-based policy works — or silently misses. Press Play, then Break it.

① Assign in EntraAdmin assigns the SOC-Analysts group to the Zscaler app.
② SCIM syncEntra pushes users + group via the SCIM endpoint + bearer token.
③ ZPA stores groupZPA now knows the user and that they're in SOC-Analysts.
④ Policy matchesUser signs in; the group-based access policy matches → app opens.
Press Play to step through the healthy path. Then press Break it.

Want to prove the assertion carries the right identity and audience, instead of trusting the GUI? Capture the SAMLResponse with a SAML-tracer add-on, then decode it:

decode a captured SAML response and inspect the trust fields
echo "$SAML_RESPONSE_B64" | base64 -d | xmllint --format - | grep -E "Audience|NameID"
Expected output
<saml:Audience>https://samlsp.private.zscaler.com/auth/metadata</saml:Audience>
<saml:NameID Format="...emailAddress">karthik.r@wipro.com</saml:NameID>

If Audience doesn't match the SP's Entity ID exactly, the SP rejects the assertion — that's an audience mismatch. If NameID is blank or carries the wrong attribute, the SP can't map the user. Reading the assertion beats guessing at the config screen every time.

Quick check · Q3 of 10

ZPA users authenticate fine, but their group-based access policy never grants any apps. Most likely cause?

Correct: a. Login working proves SAML is fine — but a group-based policy needs the group to exist in ZPA, which is SCIM's job. An expired cert would block login entirely; a missing domain param breaks SP-initiated start, not group matching.

Karthik at Wipro faces this

ZPA users log in successfully, but no one gets their private apps. The access policy keyed on "SOC-Analysts" never fires.

Likely cause

SAML works, but SCIM Sync was never enabled — so the SOC-Analysts group doesn't exist inside ZPA, and the policy match silently fails.

Diagnosis

In ZPA he checks for the group and finds it missing. In Entra's Provisioning tab the last sync says "not started."

ZPA → Administration → IdP Configuration → Enable SCIM Sync
Fix

Generate a fresh bearer token, paste the SCIM endpoint + token into Entra Provisioning, Test Connection, set scope to "assigned users and groups," and start provisioning.

Verify

Entra's provisioning log shows the group created; in ZPA the group appears and the access policy now releases the app on next login.

ZPA / ZTNA fundamentals ZPA access policy lesson

④ Admin SSO + the five failures that break logins

Letting admins log into the Zscaler portal with Entra is a separate integration — a different gallery app (…Administrator), a different Reply URL, and one critical difference: no Just-in-Time provisioning.

For ZIA admin SSO the Entra app Zscaler Internet Access Administrator uses Identifier https://admin.zscalertwo.net and Reply URL (ACS) https://admin.zscalertwo.net/adminsso.do, with the claim memberOf = user.assignedroles. On the ZIA side you enable it at Administration → Administrator Management → Enable SAML Authentication, upload the Public SSL Certificate, optionally set an Issuer, Save, and Activate. ZPA admin SSO can run IdP-initiated, using Relay State idpadminsso.

Quick check · Q4 of 10

A brand-new ZIA admin signs in at Entra successfully, but Zscaler rejects them as "user not found." Why?

Correct: a. Entra authenticated them, so the password is fine and CA didn't block. Admin SSO simply has no JIT — you must pre-create the admin in ZIA (Administration → Administrator Management) matching the NameID, then it works.

Aditya at TCS faces this

A new security admin authenticates at Entra perfectly, returns to Zscaler — and gets a blank error page. Regular users sign in fine.

Likely cause

Admin SSO has no JIT. The user app auto-creates accounts; the Administrator app never does. The admin record simply doesn't exist in ZIA yet.

Diagnosis

Users work (JIT on), admins don't — that contrast points straight at the missing admin account, not the certificate or claims.

ZIA → Administration → Administrator Management → Add Administrator
Fix

Manually create the admin in ZIA with a Login ID that matches the Entra NameID, assign the right role, Save, Activate. Repeat the IdP-initiated test.

Verify

The admin signs in via SSO and lands on the dashboard with the correct role scope. No more "user not found."

The five failures, with the symptom you'll actually see

Figure 4 — SAML on, but no Conditional Access vs SAML + Conditional Access
Before and after: SAML without Conditional Access lets a stolen password in; SAML with Conditional Access blocks it Left panel: an attacker with a stolen password reaches Entra, which has no Conditional Access, signs the assertion, and Zscaler lets them in. Right panel: the same attacker hits Entra with a Conditional Access policy that requires MFA and device compliance, and is blocked before any assertion is signed. SAML delegates identity. It does NOT add MFA. Conditional Access does. SAML only — no Conditional Access Attacker stolen password Entra no CA → signs Zscaler → IN ✗ trusts the signed badge SAML + Conditional Access Attacker stolen password Entra + CA MFA + device BLOCKED ✓ no assertion signed
This is the myth from the top, settled. SAML alone trusts any signed badge — a stolen password walks in. Attach a Conditional Access policy to the Zscaler app and Entra blocks the badge before it's ever signed.
Pro tip

In Entra, set a notification email on the SAML signing certificate. The 3-year expiry feels infinite right up until the morning every login dies. A reminder email turns a P1 outage into a 5-minute planned re-upload.

Common mistake

Enabling auto-provisioning attributes (memberOf, department) on the Zscaler side but never emitting the matching claim from Entra — or vice-versa. Both sides must agree, or groups/departments arrive empty and policies miss silently.

Prove it from the logs, not the config screen

Don't trust the "Save" button — confirm Entra actually issued an assertion to Zscaler. Pull the sign-in logs and read the result code per user.

confirm the assertion was issued — Microsoft Graph PowerShell
Connect-MgGraph -Scopes "AuditLog.Read.All"
Get-MgAuditLogSignIn -Filter "appDisplayName eq 'Zscaler Internet Access ZSTwo'" -Top 3 |
  Select-Object userPrincipalName, @{n='result';e={$_.Status.ErrorCode}}, ipAddress, createdDateTime
Expected output
userPrincipalName        result  ipAddress       createdDateTime
priya.sharma@infosys.com      0  203.0.113.24    2026-06-04T08:41:10Z
karthik.r@wipro.com           0  203.0.113.51    2026-06-04T08:39:02Z

A result of 0 means success. A non-zero code such as 50105 tells you exactly which failure you hit — assignment, in that case. The log is the truth; the config screen is only your intent.

Pause & Predict

An admin login redirects to Entra, authenticates, and returns — but Zscaler shows an error. The user app works perfectly. What three things are different about admin SSO? Type your guess.

Answer: Admin SSO uses (1) a different gallery app (…Administrator), (2) a different Reply URL (/adminsso.do for ZIA), and (3) no JIT — so the admin must already exist in Zscaler. Any one of these missing produces a perfect Entra login and a failed Zscaler entry.
Figure 5 — One-glance cheat sheet: who fills what, and the 5 failures
Cheat sheet mapping Entra-side fields to Zscaler-side fields plus the five common failures Left column lists what you set in Entra: gallery app, Entity ID, Reply URL, claims, download cert, assign users. Right column lists what you set in Zscaler: auth type SAML, SAML portal URL, NameID, upload cert, auto-provisioning, then Activate. A bottom strip lists the five failures. Configure Entra (IdP) on the left → Zscaler (SP) on the right → Activate ① Microsoft Entra ID (IdP) • Add gallery app (match your cloud) • Set Identifier / Entity ID + Reply URL • Claim: memberOf = user.assignedroles • Download: ZIA = Base64 cert · ZPA = metadata XML • Assign users / groups (or → AADSTS50105) • (ZPA) Provisioning → SCIM token Role needed: Cloud Application Administrator ② Zscaler ZIA / ZPA (SP) • ZIA: Authentication Settings → SAML • SAML Portal URL = Entra Login URL • Login Name Attribute = NameID (exact) • Upload cert (.pem) / ZPA: import metadata XML • Enable SAML Auto-Provisioning (JIT) • ZPA: Add IdP Config + Enable SCIM Sync Then ACTIVATE — nothing is live until you do The 5 failures: 1. AADSTS50105 → assign user/group 2. wrong cert format → .pem vs XML 3. NameID misread → set exactly "NameID" 4. audience mismatch → Entity ID must match 5. cert rotation → re-upload before expiry
Screenshot this one. Left = Entra, right = Zscaler, and the gold strip is every failure mapped to its fix. The most-missed box is the red one: Activate.

🤖 Ask the AI Tutor

Tap any question — instant, scoped to this lesson. No login, no waiting.

Pre-curated from Zscaler docs + community Q&A, scoped to this lesson. For a live prod issue, paste your export into chat.techclick.in.

📝 Wrap-up assessment — six more

You've answered 4 inline. Six left. 70% (7 of 10) marks the lesson complete on your profile. Tap Submit all answers at the end.

Q5 · Remember

In the ZIA "Configure SAML" dialog, the Login Name Attribute must be set to exactly which value?

Correct: c. ZIA reads the user's identity from the assertion's NameID, and the field is case-sensitive. displayName is for the user's name, not the login key.
Q6 · Apply

What is the minimum Entra ID role needed to add the Zscaler gallery app and configure SAML SSO?

Correct: d. Cloud Application Administrator can add gallery apps and configure SSO — least privilege. Global Admin works but is overkill; Security Reader and Helpdesk Admin can't configure the app.
Q7 · Analyze

Users see AADSTS50105 when signing in to the Zscaler app. The fastest fix?

Correct: b. AADSTS50105 = "user not assigned to a role for the application." Per-app assignment is on by default in Entra, so assigning the user/group clears it. The cert and NameID aren't the issue here.
Q8 · Analyze

SAML worked for two years, then every Zscaler login failed on the same morning. ZPA was unaffected; only ZIA broke. Best explanation?

Correct: b. ZIA holds a static .pem, so a cert rollover breaks it until you re-upload; ZPA imports metadata that can carry the new cert, so it survives. An outage would hit both; password expiry isn't synchronized; SCIM affects provisioning, not login.
Q9 · Evaluate

A 5,000-seat SOC wants the least login breakage when the Entra signing certificate rotates. Which approach is the better design?

Correct: d. A runbook + expiry alerts + metadata import minimises breakage and human error. Disabling signing destroys the trust model, "never expire" isn't an option you control, and local passwords throw away SSO entirely.
Q10 · Evaluate

Your team enabled Zscaler SAML and announced "we now have MFA on Zscaler." Is that claim correct?

Correct: c. SAML hands off identity to Entra; the strong-auth controls live in a Conditional Access policy attached to the Zscaler enterprise app. Zscaler itself doesn't run the MFA — that's the whole point of Figure 4.
Lesson complete — saved to your profile.
Almost! You need 70% (7 of 10) — re-read the path that tripped you up and tap "Try again".

🧠 In your own words

Type one line: Why does Zscaler never see the user's password once SAML is on — and what is the one thing it must trust instead? Then compare to the expert version.

Expert version: Authentication is delegated to Entra (the IdP), so the password lives only there. Zscaler (the SP) receives a digitally signed SAML assertion and verifies that signature against the IdP's public signing certificate it has on file. The certificate is the single trust anchor — which is why its format (Base64 for ZIA, metadata XML for ZPA) and its expiry make or break every login.

🗣 Teach a friend

Best way to lock it in — explain it in one line to a teammate. Tap to generate a paste-ready summary.

📖 Glossary

IdP (Identity Provider)
The system that authenticates the user and issues the signed assertion — here, Microsoft Entra ID.
SP (Service Provider)
The app that trusts the IdP and consumes the assertion — here, Zscaler ZIA / ZPA. It never sees the password.
SAML assertion
A signed XML statement ("this user is X, here are their attributes") passed via the browser from IdP to SP.
ACS / Reply URL
Assertion Consumer Service — the SP endpoint that receives the assertion (e.g. /adminsso.do for ZIA admin).
Entity ID / Audience
The unique identifier of the SP; the assertion's Audience must match it exactly or the SP rejects it.
NameID
The field carrying the user's identity (usually UPN/email); ZIA's "Login Name Attribute" must read it.
SCIM
A provisioning protocol that syncs users and groups from Entra into Zscaler before login.
JIT provisioning
Just-in-Time — auto-creating the user on first SSO. ZIA user SSO supports it; admin SSO does not.
Conditional Access
Entra policy engine that enforces MFA, device compliance, and location on the app — the actual security layer over SSO.
Federation Metadata XML
An XML bundle (entity ID + endpoints + signing cert) that ZPA imports to learn about the IdP in one file.
Relay State
A value the IdP echoes back to route the user (ZPA admin uses idpadminsso).

📚 Sources

  1. Microsoft Learn — Configure Zscaler Internet Access (ZSTwo / ZSThree / ZSNet) for SSO with Microsoft Entra ID. learn.microsoft.com/entra/identity/saas-apps
  2. Microsoft Learn — Configure Zscaler Internet Access Administrator for SSO with Microsoft Entra ID. learn.microsoft.com/entra/identity/saas-apps/zscaler-internet-access-administrator-tutorial
  3. Microsoft Learn — Configure Zscaler Private Access (ZPA) for SSO + automatic user provisioning (SCIM) with Microsoft Entra ID. learn.microsoft.com/entra/identity/saas-apps/zscalerprivateaccess-tutorial
  4. Zscaler Help Portal — SAML & SCIM Configuration Guide for Microsoft Entra ID + Admin SAML Configuration Guide. help.zscaler.com/zia
  5. Zscaler Help Portal — Adding Identity Providers (ZIA / ZPA IdP configuration). help.zscaler.com/zia/adding-identity-providers
  6. SSOJet — Azure Entra ID SAML Troubleshooting: 15 Common Errors and Their Fixes. ssojet.com/blog
  7. Zscaler Community — Problem with Azure AD SSO (practitioner thread). community.zscaler.com

What's next?

You can prove a user's identity now — next, decide what that identity is allowed to reach. Learn how ZPA turns a verified user + their synced groups into least-privilege access policies.