Skip to main content

O que é o SSO EasyGoal?

O SSO (Single Sign-On) é o serviço de autenticação centralizado do ecossistema Easy Goal. Ele:
  • Autentica usuários usando Supabase Auth (email/senha + OAuth Google, GitHub, Azure/Microsoft)
  • Emite um cookie eg_session (JWT assinado) compartilhável em subdomínios .easygoal.com.br
  • Injeta ?eg_session=<token> nos redirects cross-domain para apps internos autorizados
  • Para apps externos: emite um eg_token temporário trocável via POST /auth/verify
  • Recebe webhooks do app-front quando um pagamento é confirmado

Fluxo resumido

O parâmetro de redirect é redirect_to (não redirect_uri). Use sempre redirect_to ao construir URLs de redirecionamento para o SSO. A URL deve estar cadastrada em Supabase → Auth → URL Configuration.
O eg_session é um JWT assinado com SSO_JWT_SECRET e setado em:
  • httpOnly: true — não acessível por JavaScript
  • domain: .easygoal.com.br em produção — compartilhado entre todos os subdomínios
Claims do eg_session:
Não há claim role ou discord_id no eg_session. A autorização de administrador é verificada no app-front via requireAdmin() que consulta o banco diretamente.

Integração via @easygoal/packages/auth (recomendado)

Para conectar um app ao SSO, use o package do monorepo. Ele encapsula o handleAuthCallback, EgSessionProvider e hook useEgSession. Veja o fluxo completo em Autenticação Cross-Domain.

Variáveis de Ambiente do SSO

WEBHOOK_SECRET (SSO) e SSO_WEBHOOK_SECRET (app-front) devem ser idênticos. Qualquer divergência fará com que todos os webhooks sejam rejeitados com status 401.

Endpoints do SSO

Checklist do SSO

Configurar SSO_JWT_SECRET para assinar o eg_session
Configurar WEBHOOK_SECRET (= SSO_WEBHOOK_SECRET do app-front)
Configurar NEXT_PUBLIC_SUPABASE_URL e NEXT_PUBLIC_SUPABASE_ANON_KEY
Adicionar URLs de redirect em Supabase → Auth → URL Configuration
Registrar URLs de callback em Supabase → Auth → Redirect URLs
Implementar POST /api/webhook/payment com verificação HMAC SHA256
Testar webhook com o botão “Testar Webhook” no admin do app-front