Skip to content
← All projects

Project 3

Enterprise SSO with Conditional Access

SAML 2.0Entra IDConditional Access

Architecture

Architecture diagram of Enterprise SSO with Conditional Access: a support agent redirected to Entra ID as identity provider, which enforces MFA via Conditional Access and issues a signed SAML assertion that Zendesk, as service provider, trusts to grant dashboard access.

Overview

What was built

Connected Zendesk to Microsoft Entra ID as the identity provider over SAML 2.0, then layered a Conditional Access policy on top that requires MFA for every sign-in to Zendesk. Support agents authenticate through Entra ID instead of a Zendesk-only password, get challenged for MFA before they ever reach the application, and can be provisioned, monitored, or cut off from one place instead of inside Zendesk itself.

Why

Why it matters

A support team signing in to Zendesk with individual local passwords has no central visibility and no fast way to revoke access when someone leaves. Every agent account is a separate point of failure.

Centralizing authentication in Entra ID and enforcing MFA through Conditional Access, rather than relying on Zendesk's own login screen, moves the security control to a layer the application cannot bypass. That distinction, MFA enforced before the user reaches the app instead of inside it, is the difference between a security control and a security suggestion.

How it works

The walkthrough

Step 1 of 3

Register and configure SAML

Registered Zendesk as an Enterprise Application in Entra ID and configured the SAML trust: Entity ID, reply URL, and sign-on URL on the Entra side, then the matching SAML SSO URL and certificate thumbprint on the Zendesk side. SAML is unforgiving about precision here. Every value has to match exactly between the two systems, or the trust relationship does not form at all.

Microsoft Entra ID SAML single sign-on configuration for the Zendesk enterprise application
SAML configuration in Entra ID, matched field for field against Zendesk's side.

Step 2 of 3

Assign users and enforce MFA

Created a security group for Zendesk agents through the Microsoft 365 Admin Center, assigned them to the app in Entra ID, and built a Conditional Access policy scoped to that group and that app requiring multi-factor authentication. Onboarding agents through the same admin center used for the rest of the organization, rather than inside Zendesk directly, keeps account lifecycle consistent with how every other identity in the tenant is managed.

Conditional Access policy requiring multi-factor authentication for the Zendesk agents group
Conditional Access policy requiring MFA, scoped to the Zendesk agents group.

Step 3 of 3

Verify both flows

Tested sign-in starting from the Zendesk side and confirmed the redirect to Entra ID, the MFA challenge, and the return to Zendesk all worked, then confirmed the same in Entra's sign-in logs: successful authentication, MFA satisfied, for every test sign-in.

Microsoft Entra ID sign-in logs showing successful authentication with MFA satisfied for Zendesk
Sign-in logs confirming MFA enforcement on every authenticated session.

What went wrong

Honest account

This build did not have a dramatic failure, but SAML configuration punishes small mistakes. Getting the Entity ID, reply URL, and certificate thumbprint to match exactly between Entra and Zendesk took more than one pass. A single mismatched value anywhere in that chain does not produce a helpful error message, it just breaks the trust relationship silently, which meant double-checking every field against both systems rather than trusting that copying a value once was enough.

What I learned

Takeaways

Conditional Access policies apply at the token issuance layer, before the user ever reaches the application. That is a meaningfully stronger security posture than app-level MFA, which lives inside the application and can be misconfigured or bypassed independently of everything else. Enforcing MFA at the identity layer means every application behind that identity inherits the same control automatically, instead of needing its own separate MFA setup.