Início rápido

Pré-requisitos

  • Auth Platform rodando (http://localhost:4000)
  • Admin Console rodando (http://localhost:4001)
  • Token de admin (logue no Admin Console e copie o Bearer token do DevTools)

1. Registre seu sistema

Acesse o Admin Console → SistemasNovo sistema e preencha:

CampoValor para dev
NomeMeu App
Redirect URIshttp://localhost:3000/callback
Allow Self Registertrue (usuário se cadastra sozinho)
Require Admin Activationfalse (acesso imediato)
Require MFAfalse

Ou via API:

curl -X POST http://localhost:4000/admin/systems \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Meu App",
    "redirectUris": ["http://localhost:3000/callback"],
    "allowedScopes": ["openid","email","profile","offline_access"],
    "allowSelfRegister": true,
    "requireAdminActivation": false,
    "requireEmailOtp": false,
    "requireMfa": false
  }'

Guarde o clientId retornado.

2. Configure o cliente OIDC

import { UserManager, WebStorageStateStore } from 'oidc-client-ts';

const userManager = new UserManager({
  authority:                `http://localhost:4000`,
  client_id:                'SEU_CLIENT_ID',
  redirect_uri:             `${window.location.origin}/callback`,
  post_logout_redirect_uri: `${window.location.origin}/`,
  scope:                    'openid email profile offline_access',
  response_type:            'code',
  automaticSilentRenew:     true,
  userStore: new WebStorageStateStore({ store: window.sessionStorage }),
});

// Login
await userManager.signinRedirect();

// Callback
await userManager.signinRedirectCallback();

// Obter token
const user = await userManager.getUser();
const accessToken = user?.access_token;

3. Teste o login

Abra http://localhost:4000/auth?client_id=SEU_CLIENT_ID&response_type=code&redirect_uri=http://localhost:3000/callback&scope=openid+email+profile&code_challenge=...&code_challenge_method=S256

ou use o exemplo completo em examples/01-nextjs-pkce.

4. Valide o token na sua API

import { createRemoteJWKSet, jwtVerify } from 'jose';

const jwks = createRemoteJWKSet(new URL('http://localhost:4000/jwks'));

const { payload } = await jwtVerify(token, jwks, {
  issuer:   'http://localhost:4000',
  audience: 'http://localhost:4000',
});

console.log(payload.sub);           // userId
console.log(payload.account_id);    // conta ativa
console.log(payload.roles);         // ['admin', 'user', ...]
console.log(payload.is_admin);      // true | false
console.log(payload.resource_scopes); // ['carteira:read', ...]

Pronto. Veja os claims do token para entender todos os campos disponíveis.