TTechclick All lessons
Zscaler · Batch 11 · Lesson 4L2 / IMPLEMENTATION

Authentication & deployment — who the user is, and how they get ZCC

Forwarding gets the packet to the PSE. Authentication tells the PSE who sent it. This lesson covers the three auth options (Hosted DB / SAML / Kerberos), why 99% of enterprises pick SAML, how the IdP integration actually works (Azure AD / Okta / Ping), SCIM provisioning, the ZIdentity layer, and how you roll ZCC out to thousands of laptops without breaking anything.

📅 May 24, 2026 · ⏱ 15 min read · 🏷 10-question assessment included
🎯 By the end of this lesson, you'll be able to

Why this lesson matters

Without identity, ZIA can only apply Location policy — the lowest-resolution control. Identity unlocks per-user, per-group, per-department policy: "engineers can access GitHub, marketing can't access Reddit, the CFO bypasses bandwidth caps." Identity is also what lets ZPA replace VPN — every per-app access decision is keyed on the user's IdP identity + group membership, not on a network port.

Getting auth wrong has loud failure modes: users see the wrong policy (security incident), or they hit a SAML loop (helpdesk floods), or new joiners can't log in for days (HR escalates). Auth is the spine — get it right once, everything downstream gets easier.

Three authentication methods — quick compare

MethodWho manages usersWhen to useDownside
Hosted DBZscaler (local user store in the CA)PoC, lab, very small orgs (<50 users)Manual user mgmt — no SSO, no group sync. Doesn't scale.
SAML SSOYour IdP (Azure AD / Okta / Ping / ADFS)99% of enterprises — the defaultInitial setup is the trickiest 30 minutes of any rollout
KerberosActive Directory (on-prem)Strictly on-prem Windows estates already AD-joinedBrittle behind proxies; cloud-IdP era killed Kerberos use

If you're starting a fresh rollout in 2026, the answer is SAML. Hosted DB is for labs. Kerberos is legacy — don't introduce it now.

SAML — the assertion walkthrough

SAML feels mystical until you've walked one assertion. Then it's mechanical. Here's exactly what happens when a user types http://gateway.zscaler.net (the ZIA enforcement URL) into a fresh browser:

SAML SP-initiated SSO flow — ZIA <-> Azure AD
SAML SP-initiated SSO flow 7-step sequence diagram: User browser to ZIA SP, ZIA returns SAML AuthnRequest redirect, browser POSTs to Azure AD IdP, Azure AD authenticates user, IdP returns signed SAML assertion, browser POSTs assertion to ZIA ACS URL, ZIA validates signature and creates session. User Browser ZIA (SP) Azure AD (IdP) 1. GET gateway.zscaler.net 2. 302 redirect: SAML AuthnRequest → login.microsoftonline.com 3. POST AuthnRequest (with Issuer = ZIA EntityID, ACS = ZIA's URL) 4. Login page (password / MFA / device check) 5. Credentials submitted 6. Signed SAML Response (Assertion: NameID, Group, dept, …) — POST to ACS 7. POST SAMLResponse to ZIA /sso/saml 8. Validates signature → creates session cookie → redirects to original URL

SP-initiated flow: user lands on ZIA first, ZIA bounces them to the IdP, IdP authenticates and returns a signed assertion via the browser, ZIA validates the signature with the IdP's metadata cert, creates a session. Total: typically <5 seconds end-to-end.

What's in a SAML assertion

The XML SAML Response payload is what makes auth actually mean something. Boiled down it carries:

ZIA reads the AttributeStatement to map the user to groups / departments / policies. Get the attribute names wrong in the IdP config and group-based policies silently break.

Configuring Azure AD as the ZIA IdP — step-by-step

Azure AD Portal · create the SAML app for ZIA
1. Enterprise Applications → New Application → Browse the gallery
2. Search "Zscaler" → "Zscaler ZIA - Service Provider" template
3. Single sign-on → SAML
4. Basic SAML Configuration:
   Identifier (Entity ID):  https://login.zscaler.net  (or your cloud)
   Reply URL (ACS):         https://login.zscaler.net/sfc_sso
   Sign on URL:             https://login.zscaler.net

5. User Attributes & Claims:
   - emailaddress  →  user.mail
   - displayname   →  user.displayname
   - department    →  user.department
   - memberOf      →  user.assignedroles  (or send groups as user.groups)

6. SAML Signing Certificate → Download Federation Metadata XML

7. Users and groups → assign the AD groups that should get Zscaler

8. In ZIA Admin Portal:
   Administration → Authentication → SAML →
   Upload IdP Metadata XML → Auto-Provisioning ON
   → Save → Activate
💡Pro Tip — one IdP app for ZIA + ZPA, not two

Many engineers create separate Azure AD enterprise apps for ZIA and ZPA. You don't have to. The same SAML app can serve both — set up the ZIA SP first, then add ZPA's ACS URL as a second Reply URL in the same app. Users get one consent screen, one set of group assignments, one place to audit. Cleaner ops, simpler audit.

Modern path: use the Federation Metadata URL instead of uploading static XML. In Azure AD, the URL is https://login.microsoftonline.com/{tenant}/federationmetadata/2007-06/federationmetadata.xml (Okta and Ping have equivalent URLs). Paste that URL into ZIA's SAML config — ZIA polls it on a schedule and auto-rotates the IdP signing cert. Eliminates the "old cert in metadata → SAML loop on Monday morning" failure entirely, which is otherwise the #1 SAML incident pattern.

SCIM provisioning vs JIT — pick one

When a user appears in Azure AD, how do they appear in ZIA? Two answers:

AspectJITSCIM
Setup effortZero (just turn on Auto-Provisioning)Configure SCIM endpoint + secret token in Azure AD
De-provisioningManual (user lingers in ZIA until you clean up)Automatic — disable in IdP → disabled in ZIA in <1 min
Pre-creationNo — user must log in once firstYes — onboard new joiners before day 1
Group syncEach login refreshes group membership from assertionReal-time as soon as IdP group changes
Best forSmall orgs, fast PoCProduction at scale — pretty much mandatory >500 users

SCIM is the production answer. JIT alone leaves dead accounts in your tenant when employees leave — both a security and licensing problem.

💡Auth Frequency — the "I keep getting asked to log in" setting

Auth Frequency (Administration → Authentication Settings → Authentication Frequency) controls how often a user re-authenticates: Daily / Weekly / Monthly / Per Session. Default is Monthly. This is the #1 cause of "I keep getting asked to log in" help-desk tickets — usually because someone bumped it to Daily or Per Session "for security" without thinking about the UX hit. Tune it deliberately: most enterprises live happily on Monthly with TOTP-backed SAML.

ZIdentity — the unified identity layer

ZIdentity is Zscaler's unified identity layer that sits between your IdP and all Zscaler products (ZIA, ZPA, ZDX, ZCC). As of late 2025 it's the default for new tenants and mandatory for new features like ZDX 2.0 and Branch Connector. Old SAML-per-app config still works for legacy tenants — but new builds should adopt ZIdentity from day 1. Without it, each product separately consumes the IdP (three SAML apps in Azure AD, three audit trails). With it, the IdP integrates once and ZIdentity brokers identity to every Zscaler product.

Practical reasons to enable ZIdentity:

ZCC enrollment — how the agent knows who you are

You can't have identity-bound forwarding (Lesson 3) without ZCC knowing who its user is. ZCC enrolment is what binds the local agent to a specific IdP identity. Two enrolment modes:

Mode A — Manual / user-driven

User downloads ZCC, opens it, types their email. ZCC redirects to your IdP login (SAML), user signs in, ZIdentity issues a long-lived enrolment token tied to that user. Token survives reboots, expires per policy (default 180 days; configurable 7–365 days in Administration → ZCC Portal → Enrollment).

Mode B — Auto-enrol via Intune / Jamf / SCCM (the production way)

Push ZCC via MDM with the enrolment payload baked in:

Intune · ZCC silent install MSI parameters
msiexec /i Zscaler-windows-3.x.msi /qn ^
  CLOUDNAME=zscalerthree.net ^
  POLICYTOKEN=<tenant-policy-token-from-ZCC-portal> ^
  USERDOMAIN=techclick.in ^
  HIDETRAY=0 ^
  STRICTENFORCEMENT=1 ^
  CLEANUNINSTALLPASSWORD=<long-random-string> ^
  LOGINPASSWORD=<uninstall-guard-password>

LOGINPASSWORD=<password> — uninstall guard, required in modern ZCC, prevents end-user uninstall via Add/Remove Programs even if the user is local admin. Pair with CLEANUNINSTALLPASSWORD for the silent MSI uninstall path.

On first launch, ZCC reads the embedded policy token, contacts ZCC Portal, and silently exchanges the token for a SAML-backed enrolment using the logged-in Azure AD user. No user input. Zero help-desk tickets if the MDM payload is correct.

Common Mistake — STRICTENFORCEMENT=0 in production

The MSI parameter STRICTENFORCEMENT controls whether ZCC blocks all traffic until enrolment completes. Engineers leave it at 0 ("permissive") during testing and forget to flip it to 1 for production. Result: a savvy user kills the ZCC process and gets unfiltered internet. Always ship with STRICTENFORCEMENT=1 in production — combined with CLEANUNINSTALLPASSWORD so the agent can't be removed without your password.

The mass-deployment SVG — fleet rollout in 3 lanes

ZCC mass-deployment pipeline (3 OS lanes)
ZCC mass-deployment pipeline Three OS lanes (Windows via Intune, Mac via Jamf, Linux via SCCM/manual) all feeding into ZCC Portal which validates against ZIdentity which authenticates against Azure AD. Windows fleetIntune push: ZCC MSI + token macOS fleetJamf push: ZCC PKG + token Linux / iOS / AndroidManual / SCCM / mobile MDM ZCC Portalpolicy.zscaler.net — receives enrolment ZIdentity (unified broker) Azure AD / Okta / Ping (SAML + SCIM)

Every endpoint, every OS, gets ZCC pushed by its native MDM. ZCC reports to the ZCC Portal, which proxies enrolment through ZIdentity to your IdP. One identity layer, all OSes covered.

ZCC Enrollment Lab SAML Loop Troubleshooting

Real-world scenario — SAML loop after Azure AD config change

Monday morning. The Azure AD team rotates the SAML signing certificate as part of their quarterly rotation. By 10:00 AM the help desk is on fire: "I keep getting redirected to Microsoft login and back to ZIA forever — infinite loop."

Diagnostic path:

  1. Open one of the broken sessions in DevTools → Network. You see SAML POST → 302 → ZIA → redirect to IdP → POST → 302 → ZIA. Loop confirmed.
  2. Check the SAMLResponse from the IdP — copy from network tab, decode the Base64 payload at samltool.com.
  3. Notice the assertion is signed with a new cert (thumbprint changed). ZIA still has the old IdP cert in its metadata.
  4. Fix: ZIA Admin Portal → Administration → Authentication → SAML → upload fresh IdP Metadata XML → Activate.
  5. Validate one test user — login succeeds first try.

The full fix is <5 minutes once you've seen this pattern once. The lesson: when your IdP rotates certs, the SP must re-import metadata, full stop. Set a Slack/email alert from your IdP team when they rotate, and re-upload metadata the same day. (Even better: use the Federation Metadata URL — see the Pro Tip earlier — and ZIA auto-rotates.)

Exact error strings to grep for: in the IdP logs you'll typically see NotOnOrAfter condition violated (assertion came in after its expiry window) or NotBefore condition not yet met (SP clock is behind the IdP). Both point to clock skew or cert/metadata drift. Search those exact phrases in your SIEM during a SAML incident.

Verify — confirm SAML auth is actually working

After IdP setup:

Common Mistakes — auth + deployment

📌 Quick reference (memorise before Module 5)

QUICK LAB · ~15 MIN

Set up SAML SSO for your tenant:

  1. In Azure AD: create an Enterprise Application from Zscaler ZIA template. Copy the Federation Metadata URL.
  2. In ZIA Admin → Authentication Settings → SAML: paste the metadata URL (not XML upload). Save.
  3. Provision a test user, assign to the Zscaler app in Azure.
  4. From a clean browser, navigate to gateway.zscaler.net → should redirect to Azure → return signed in.
  5. Check ZCC Portal → Enrollment → see the user's enrolled device with cert valid 180 days.

📝 Check your understanding

10 scenario questions — interview + ZDTA exam depth. Pick one answer per question. You need 70% (7 of 10) to mark this lesson complete on your profile.

Q1

You're rolling out Zscaler to a 3000-user enterprise that already uses Azure AD for everything else. Which authentication method?

Correct: (a). SAML against your existing IdP is the production answer for every enterprise rollout in 2026. (b) Hosted DB has no SSO and no group sync — only for labs. (c) Kerberos is on-prem-only and brittle behind proxies. (d) ADFS works but is legacy — Microsoft itself recommends moving to Azure AD direct SAML.
Q2

In a SAML SP-initiated flow, who actually signs the SAML assertion?

Correct: (c). The IdP holds the SAML signing private key and signs every assertion. The SP (ZIA) holds the IdP's public cert (via metadata import) and validates every received assertion's signature. (a) browsers never sign SAML — they just pass it. (b) the SP is the relying party, not the signer. (d) TLS protects transport; the SAML signature is application-layer integrity over the assertion content. They're independent layers.
Q3

After IdP cert rotation Monday morning, every user gets stuck in a SAML redirect loop (browser bounces ZIA ↔ Azure AD endlessly). Most likely root cause?

Correct: (b). Classic SAML cert rotation breakage. The IdP rotates its signing key; the SP (ZIA) still trusts the old key, so it rejects new assertions as "signature invalid" and bounces the user back to the IdP — infinite loop. The fix is always: re-upload IdP metadata to the SP. (a) Azure AD is up — auth works at the IdP side; the assertion is just rejected at the SP. (c) password resets don't cause this. (d) cookies don't carry the signing key.
Q4

You're at 800 users today, planning to hit 5000 in 18 months. Which provisioning model do you set up now?

Correct: (d). SCIM is the production answer at scale — leavers get disabled in ZIA the moment IdP disables them (security + license cost). (a) JIT alone leaves dead accounts. (b) CSV is manual and stale within a day. (c) Kerberos is a legacy on-prem auth method, not a provisioning protocol.
Q5

Your engineers report ZCC can be killed in Task Manager and uninstalled by anyone. Users disable it to bypass ZIA. Which MSI install parameter prevents this?

Correct: (b). Both flags together are the production lockdown — strict enforcement breaks internet if ZCC is killed (so users can't keep working without it), uninstall password blocks removal. Always ship both in MDM. (a) just sets the cloud. (c) just hides the tray icon. (d) is needed for enrolment, but doesn't prevent killing the agent.
Q6

You configured a group-based URL Filtering rule: "block social media for Marketing." Marketing users still access Facebook. What's the most likely root cause?

Correct: (a). Most common cause of "group rules silently failing" — the SAML AttributeStatement is sending group memberships under the wrong attribute name, so ZIA doesn't see the user in Marketing. Always verify in Insights → Web that the user's recorded department/group matches what the IdP is supposed to send. (b)/(c)/(d) are real causes too but the IdP attribute mapping is the #1 reason group policy "doesn't work."
Q7

You want one SAML enterprise app in Azure AD to cover both ZIA and ZPA. How?

Correct: (c). Azure AD enterprise apps support multiple Reply URLs (ACS endpoints). One app, both ZIA + ZPA. ZIdentity is the even cleaner long-term move. (a) is false — apps support multiple SPs. (b) ZPA uses SAML, not pure OAuth. (d) duplicating apps creates two audit trails — exactly what you're avoiding.
Q8

A user's SAML auth fails with "Assertion expired" in ZIA logs, even though they just clicked login one second ago. Most likely cause?

Correct: (b). SAML assertions are time-bounded — NotBefore and NotOnOrAfter define when they're valid. If the SP's clock is wildly off (commonly because NTP failed on a self-managed component), even a freshly-issued assertion looks "already expired" or "not yet valid." Both sides on NTP, always. (a) network slowness doesn't make assertions expire. (c) password speed is bounded by the IdP, not the SP. (d) group missing causes a different error.
Q9

What does ZIdentity solve that plain per-product SAML doesn't?

Correct: (d). ZIdentity is the unified identity broker layer — its whole purpose is to centralize identity across ZIA, ZPA, ZDX, ZCC instead of each product separately integrating with the IdP. Operationally simpler, audit-friendly, and required for some 2025+ Zscaler features. (a) latency isn't the differentiator. (b) it doesn't reduce license cost. (c) crypto is the same — SAML is the same protocol.
Q10

A new joiner appears in Azure AD on Monday. With SCIM enabled, when do they appear in ZIA?

Correct: (c). That's SCIM's superpower — push-based, near-real-time provisioning. A user added to the right Azure AD group gets pushed to ZIA within the sync cycle, so they're known + group-mapped before their first login. (a) is JIT behaviour, not SCIM. (b) is the bad old way. (d) password resets don't trigger SCIM.
Lesson complete — saved to your profile.
Almost! Review the sections above and try again — you need 70% (7 of 10) to mark this lesson complete.

What's next — Lesson 5

Forwarding gets traffic in, auth identifies the user. Next: URL Filtering & Cloud App Control — the policies that actually shape what users can and can't do. URL categories, custom URLs, time quotas, sanctioned vs unsanctioned SaaS, and how ZIA evaluates rules in order.