← Identity & Access Management Identity & Access Management

Single Sign-On (SSO)

One login, many applications — and one of the few identity controls that makes security and user experience better at the same time instead of trading one for the other.

Single Sign-On lets someone authenticate once and carry that proof of identity into a whole set of independent applications, instead of each app checking a password of its own. A central identity provider does the verifying; every connected application simply trusts what it says. That's the core idea I keep coming back to when I explain SSO to a team: it doesn't eliminate authentication, it just moves all of it to one well-guarded place and reuses the result.

SSO lives inside the broader Identity & Access Management discipline, and it answers one narrow question — is this really them? — a single time, then passes that answer around as a short-lived, signed token rather than asking again at every door.

Why It's Worth Getting Right

SSO is unusual among controls because it pulls security and usability in the same direction rather than opposite ones.

The trade-off is concentration: the identity provider becomes the highest-value target in the whole environment. Whatever breaks in, breaks in everywhere — which is exactly why the engineering around it deserves real scrutiny, not a checkbox.

The Vocabulary Worth Knowing

TermWhat it means
Identity Provider (IdP)The trusted system that authenticates the user and issues assertions or tokens — Okta, Microsoft Entra ID, Ping, Google.
Service Provider (SP) / Relying Party (RP)The application the user is trying to reach, which trusts the IdP's word about the user.
Assertion / TokenThe signed statement from the IdP asserting the user's identity, and often their attributes and permissions.
FederationA trust relationship between an IdP and one or more SPs, usually across organizational or domain boundaries.
SessionThe authenticated state kept after login, governing how long access lasts before re-authentication is required.

Underneath all of it is one mechanism: delegated trust. The application never touches the password — it accepts a signed token as proof and validates that signature instead of the credential itself.

What Actually Happens at Login

Most modern SSO follows the same redirect dance, whatever the app:

SSO login sequence Client App (SP) Identity Provider App B (SP) 1 Request protected resource 2 Redirect — no session 3 Authenticate, issue signed token 4 Session established 5 Later: visits App B 6 Already trusted — no prompt

Steps 1–4 log into the first app through the identity provider; steps 5–6 show why a second app never has to ask again.

  1. Someone opens an app and asks for something that needs a login.
  2. The app finds no valid session and bounces the browser to the identity provider.
  3. The IdP checks who they are — password, passkey, MFA, device posture, whatever policy demands.
  4. On success, it issues a signed token and sends the browser back to the app.
  5. The app checks the token's signature, issuer, audience, and expiry, then starts a local session.
  6. The next federated app they visit finds the IdP already recognizes them — no second prompt. That's the "single" in Single Sign-On.

Every bit of that security rests on the token itself: signed by the IdP, scoped to the one application it's meant for, short-lived, and checked strictly on arrival.

The Protocols, and Why They're Not Interchangeable

A handful of open standards carry all of this, and the most common mistake I see is treating them as interchangeable when they solve different problems — some prove who someone is, others grant what they can access. Mixing those up is where a lot of real SSO bugs come from.

SAML 2.0

A mature, XML-based standard from 2005 that's still the default in a lot of enterprise and B2B workforce SSO. The IdP hands over a signed XML assertion describing the user, and the application reads it. It's well supported by legacy and enterprise SaaS, though its XML tooling is heavier to work with than the newer JSON-based options.

OAuth 2.0 / 2.1 — Authorization, Not Authentication

OAuth grants scoped access to a resource on someone's behalf — "let this app read your calendar" — and issues access tokens to do it. On its own, it never tells an application who the user is, which is a distinction worth holding onto carefully since conflating it with authentication is a recurring source of real vulnerabilities. OAuth 2.1 gathers a decade of OAuth 2.0 hardening into one document rather than introducing new behavior: PKCE becomes mandatory for every authorization-code flow, the implicit grant and password-credentials grant are dropped, and redirect URIs must match exactly. In practice: authorization code with PKCE for anything involving a person, client credentials for machine-to-machine calls, and the device grant for input-constrained hardware.

OpenID Connect — Authentication on Top of OAuth

OIDC is a thin authentication layer built on OAuth 2.0. It adds an ID token — a signed JWT — that actually states who the user is. It's the modern default for consumer and cloud-native SSO: JSON-based, REST-friendly, and simpler to get right than SAML. The short version: OAuth authorizes, OIDC authenticates. If an application needs to know identity rather than just access, OIDC or SAML is the right tool — OAuth by itself isn't.

ScenarioTypical choice
Enterprise / B2B workforce SSO, legacy SaaSSAML 2.0
Modern web, mobile, and API-driven appsOIDC, with OAuth 2.1 flows underneath
Delegated API access without identityOAuth 2.0 / 2.1

Where It Breaks

Concentrating trust means the failure modes concentrate too. The ones I design against first:

How I'd Design It

Passkeys Don't Replace SSO — They Sit Underneath It

Passkeys (FIDO2/WebAuthn) are changing the authentication factor that sits underneath SSO. They're phishing-resistant because the cryptographic exchange is bound to the real origin domain — a fake login page simply can't replay it — and the private key never leaves the user's device.

The distinction worth holding onto: passkeys govern how someone proves identity, and SSO protocols like SAML and OIDC govern how that proof gets carried to applications afterward. The passkey authenticates the person to the identity provider; the IdP then federates that identity out to everything connected. Passkeys strengthen the front door — SSO still distributes the keys to every room behind it. Rolling passkeys out means planning for lost-device recovery and for legacy applications that don't yet speak WebAuthn.

How a passkey fits into the SSO picture App A (SP) App B (SP) App C (SP) Identity Provider User Passkey (FIDO2/WebAuthn) bound to this IdP's origin Fake login page blocked — wrong origin

One passkey secures the one connection that matters — user to IdP. The IdP then fans federated trust out to every app on its own, separate rails.

Glossary

TermMeaning
IdPIssues identity assertions/tokens after authenticating the user.
SP / RPThe application that trusts the IdP.
AssertionA signed statement of identity/attributes, typically SAML XML.
JWTA compact, signed JSON token used by OIDC/OAuth.
ID TokenAn OIDC token conveying who the user is.
Access TokenAn OAuth token conveying what the bearer may access.
PKCEProof Key for Code Exchange — protects the authorization-code flow from interception.
FIDO2 / WebAuthnStandards behind passkeys, enabling phishing-resistant, passwordless auth.

SSO doesn't remove authentication — it moves all of it to one well-defended door, then spends every bit of that concentration on making the door worth trusting.

Related reading: AI Security & Governance — AI Identity.