Guia Completo: Como Funciona o Single Sign-On (SSO)

Guia Completo: Como Funciona o Single Sign-On (SSO)






Single Sign-On (SSO): como funciona


Single Sign-On (SSO): como funciona

Desmistifico o fluxo, os padrões e as práticas que tornam a autenticação única estável, segura e escalável entre várias aplicações.


1. Visão geral do SSO

Single Sign-On (SSO) é um conjunto de padrões e fluxos que permitem que o usuário autentique uma vez para obter acesso a múltiplas aplicações. Na prática, isso envolve dois papéis principais:

  • Identity Provider (IdP): o provedor de identidade responsável por autenticar o usuário e emitir tokens ou asserts de identidade.
  • Service Provider (SP): as aplicações que dependem do IdP para confirmar a identidade do usuário e conceder acesso.

Com SSO, a sessão de autenticação fica centralizada no IdP, enquanto cada SP apenas valida os tokens ou asserts recebidos. Essa abordagem reduz fricção para o usuário, facilita governança de identidades e simplifica políticas de segurança em ambientes com várias aplicações.

2. Protocolos e fluxos-chave

Os padrões mais comuns em SSO modernos são SAML, OAuth 2.0 e OpenID Connect (OIDC). A escolha depende do cenário: legado corporativo, aplicações web modernas, APIs e dispositivos móveis.

SSO baseado em SAML

Arquitetura baseada em XML. O fluxo Browser SSO envolve redirecionamentos entre SP e IdP, com uma asserção SAML assinada que comprova a identidade do usuário. Amplamente utilizado em ambientes corporativos com aplicações legadas.

OAuth 2.0 + OpenID Connect

OAuth 2.0 fornece autorização para recursos, enquanto o OpenID Connect adiciona identidade. O fluxo mais utilizado para SSO moderno é o Authorization Code com PKCE em clients públicos, gerando tokens de acesso (access_token) e de identidade (id_token).

OpenID Connect expande OAuth 2.0 com um id_token assinado (geralmente com RS256) e, opcionalmente, recursos do usuário via UserInfo. Em comparação com SAML, OIDC é mais flexível para aplicações web modernas, mobile e APIs.

Resumo rápido:

  • SAML: legado corporativo, XML, browser SSO, assertion-based.
  • OIDC: moderno, JSON, tokens JWT, ideal para apps web/mobile/API.
  • Fluxos: use PKCE para clients públicos e descubra endpoints via discovery document.

// Geração de PKCE e construção da URL de autorização (OAuth 2.0 + OpenID Connect)
const crypto = require('crypto');

function base64url(input) {
  return input.toString('base64')
    .replace(/=/g, '')
    .replace(/\+/g, '-')
    .replace(/\//g, '_');
}

const codeVerifier = base64url(crypto.randomBytes(32));
const codeChallenge = base64url(crypto.createHash('sha256').update(codeVerifier).digest());

const authorizeUrl = 'https://idp.example.com/authorize' +
  '?response_type=code' +
  '&client_id=' + encodeURIComponent('seu-client-id') +
  '&redirect_uri=' + encodeURIComponent('https://seu-app.example.com/callback') +
  '&scope=' + encodeURIComponent('openid profile email') +
  '&state=' + encodeURIComponent('aleatorio-state') +
  '&code_challenge=' + codeChallenge +
  '&code_challenge_method=S256' +
  '&nonce=' + encodeURIComponent('aleatorio-nonce');

console.log(authorizeUrl);

3. Arquitetura prática e integração

Em ambientes modernos, uma arquitetura típica envolve um IdP central (p.ex., Keycloak, Azure AD, Okta ou Auth0) e múltiplos SPs que consomem serviços de autenticação do IdP. Pontos-chave:

  • Discovery document: o IdP expõe endpoints (authorization, token, jwks, etc.) e as capacidades suportadas.
  • Configuração de clientes (client_id, redirect_uri, scopes) no IdP e nos SPs.
  • Validação de tokens no SP: verificar assinatura, emissor (iss), audiência (aud) e prazos (exp).
  • Rotação de chaves e JWKS para validação de assinaturas de tokens.
  • Fluxos híbridos: SP-initiado vs IdP-initiated login, dependendo do caso de uso.

Arquiteturalmente, o IdP emite tokens após autenticação bem-sucedida. O SP valida o token, estabelece uma sessão local e oferece acesso à aplicação. Em cenários multi-tenant, políticas de governança, registro de eventos e auditoria são cruciais.

4. Segurança, melhores práticas e governança

  • PKCE obrigatório para clientes públicos para evitar interceptação de código de autorização.
  • Uso de nonce em OpenID Connect para prevenir replay de identificadores de sessão.
  • State parameter para evitar CSRF em fluxos de autorização.
  • Validação completa de tokens: verificação de iss (emissor), aud (destinatário), exp (expiração) e assinatura.
  • Rotação de tokens de acesso e uso de short-lived tokens com refresh tokens com políticas de revogação.
  • Cookies de sessão com atributos seguros: Secure, HttpOnly e SameSite adequado (Lax/Strict), especialmente em contextos de SSO entre domínios.
  • TLS obrigatório, registro de eventos de autenticação e monitoramento de anomalias.
  • Governança de identidades: integração com MFA, políticas de concessão de acesso e revisão periódica de privilégios.

Ao projetar SSO, alinhe seus fluxos de autenticação com as necessidades da organização e garanta que as políticas de segurança estejam refletidas tanto no IdP quanto nos SPs. A adoção de padrões abertos facilita a interoperabilidade e reduz o custo de manutenção a longo prazo.