Open Source · OIDC / OAuth 2.0 · NestJS + Next.js

Identidade centralizada para todas as suas aplicações

Um único servidor de identidade que autentica N sistemas. Gerencie usuários, roles, memberships e auditoria com segurança enterprise — sem depender de serviços de terceiros.

Deploy com Docker em 5 minutos · 453 testes · 87% cobertura

Tudo que você precisa num único IdP

Da autenticação simples ao controle de acesso enterprise, sem vendor lock-in.

🔐

OIDC / OAuth 2.0 completo

Authorization Code + PKCE obrigatório, refresh token rotation, token exchange RFC 8693 e client credentials para M2M.

🏢

Multi-tenant nativo

Um servidor autentica N sistemas independentes. Cada app tem roles, scopes e memberships próprias, isoladas por account_id no token.

👤

Controle de acesso granular

Roles com isAdmin e scopes, Profiles para permissões extras, e Memberships com status active/pending/blocked.

🔑

MFA + Google OAuth

TOTP compatível com qualquer authenticator, verificação por e-mail OTP, e login social via Google com verificação de membership.

📋

Auditoria completa

Log append-only de todas as ações administrativas. Cada POST/PATCH/DELETE em /admin/* é registrado com ator, IP e recurso alvo.

🪝

Webhooks assinados

Notificações HMAC-SHA256 para user.access_granted, blocked e revoked. Anti-replay com tolerância de 5 minutos.

Validação local de JWT

Suas APIs validam tokens localmente via JWKS cacheado — sem roundtrip ao Auth Service a cada request.

🛡️

Rate limiting inteligente

Limites por IP, por e-mail (com lockout progressivo), por endpoint de reset e por interação MFA. Backend Redis.

📊

Métricas Prometheus

Contadores de login, falhas, tokens emitidos, MFA e rate limit hits. Pronto para Grafana.

Integrar é simples

Do login ao guard da API em menos de 20 linhas.

auth.ts — Login com PKCE
import { UserManager, WebStorageStateStore }
  from 'oidc-client-ts';

const auth = new UserManager({
  authority:    'https://auth.seudominio.com',
  client_id:    'SEU_CLIENT_ID',
  redirect_uri: `${origin}/callback`,
  scope: 'openid email profile offline_access',
  response_type: 'code',
  automaticSilentRenew: true,
  userStore: new WebStorageStateStore({
    store: window.sessionStorage,
  }),
});

// Iniciar login
await auth.signinRedirect();

// No callback
await auth.signinRedirectCallback();
guard.ts — Validar JWT na API
import { createRemoteJWKSet, jwtVerify }
  from 'jose';

const jwks = createRemoteJWKSet(
  new URL('https://auth.seudominio.com/jwks')
);

async function verifyToken(token: string) {
  const { payload } = await jwtVerify(token, jwks, {
    issuer:   'https://auth.seudominio.com',
    audience: 'https://auth.seudominio.com',
  });

  // Claims disponíveis no payload:
  // payload.sub           → userId
  // payload.account_id    → conta ativa
  // payload.roles         → ['admin', ...]
  // payload.is_admin      → true | false
  // payload.resource_scopes → ['fin:read', ...]
  return payload;
}
Ver todos os exemplos de integração →

Como funciona

# Fluxo Authorization Code + PKCE
Browser
──PKCE──► Auth Platform (:4000)
│ login · MFA · Google OAuth
│──code──► seu app (/callback)
│ POST /token
│──JWT──► sua API (:3000)
│ verifica via /jwks
│ sem roundtrip!
# Gerenciamento
Admin Console (:4001)
├── Sistemas (registrar apps)
├── Usuários + MFA + Google
├── Memberships (ativo/pendente/bloqueado)
├── Auditoria (log imutável)
└── Segurança (revogar tokens)

Construído com

NestJSNext.js 14oidc-providerPrismaPostgreSQLRedisTypeScriptargon2idjoseDocker

Pronto para começar?

Leia a documentação, rode os exemplos e integre em minutos.

Início rápido →Admin Console