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.
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 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.
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!