Claims do token
O Auth Platform emite access_tokens JWT assinados com RS256. Além dos claims padrão OIDC, cada token carrega claims específicos do sistema.
Estrutura completa
{
"iss": "https://auth.seudominio.com",
"aud": "https://auth.seudominio.com",
"sub": "3857ed26-1234-5678-abcd-ef0123456789",
"exp": 1710000600,
"iat": 1710000000,
"jti": "unique-token-id",
"email": "alice@exemplo.com",
"account_id": "acc-uuid-da-conta-ativa",
"roles": ["admin"],
"is_admin": true,
"resource_scopes": ["carteira:*", "carteira:admin"],
"amr": ["pwd"]
}
Descrição de cada campo
Campos OIDC padrão
| Campo | Tipo | Descrição |
|---|---|---|
iss | string | Issuer — URL pública do Auth Platform |
aud | string | Audience — mesmo valor que iss por padrão |
sub | string | Subject — UUID global do usuário (nunca muda) |
exp | number | Expiração (Unix timestamp) — 10 minutos por padrão |
iat | number | Emitido em (Unix timestamp) |
jti | string | JWT ID — único por token, usado para revogação |
email | string | E-mail verificado do usuário |
Claims customizados do Auth Platform
| Campo | Tipo | Descrição |
|---|---|---|
account_id | string | UUID da conta ativa neste sistema. Usado para isolamento multi-tenant |
roles | string[] | Nomes das roles atribuídas ao usuário nesta conta |
is_admin | boolean | true se o usuário tem pelo menos uma role com isAdmin=true |
resource_scopes | string[] | Union de todos os escopos das roles + profiles desta membership |
amr | string[] | Authentication Method Reference: ["pwd"] para senha, ["mfa"] para MFA |
account_id vs sub
sub= identidade global do usuário (mesma em todos os sistemas)account_id= conta dentro deste sistema específico
Em sistemas multi-conta (multiAccount=true), o mesmo usuário pode ter
contas diferentes e o account_id muda a cada login dependendo da conta escolhida.
Use account_id para isolar dados no seu banco:
// ✅ Correto — dados isolados por conta
const orders = await db.order.findMany({ where: { accountId: req.user.account_id } });
// ❌ Errado — mistura dados de todas as contas do usuário
const orders = await db.order.findMany({ where: { userId: req.user.sub } });
Verificando permissões
// Verificar se tem um escopo específico
function hasScope(user: TokenPayload, scope: string): boolean {
return user.resource_scopes?.includes(scope) ?? false;
}
// Verificar se é admin
function isAdmin(user: TokenPayload): boolean {
return user.is_admin === true;
}
// Verificar role
function hasRole(user: TokenPayload, role: string): boolean {
return user.roles?.includes(role) ?? false;
}
TTL dos tokens
| Token | Duração |
|---|---|
access_token | 10 minutos |
id_token | 10 minutos |
refresh_token | 14 dias (renovado a cada uso) |
O oidc-client-ts renova o access_token automaticamente via automaticSilentRenew.