Skip to main content
UserSession representa uma sessão autenticada do usuário. Ela permite revogar acesso antes da expiração do accessToken, controlar refresh tokens e encerrar sessões automaticamente quando regras de segurança exigirem.

Campos

CampoTipoDescrição
userSessionIdUUIDIdentificador único da sessão. Também é usado como sid nos tokens
userIdUUIDReferência ao usuário autenticado
audienceUserSessionAudienceSuperfície onde a sessão foi criada
refreshTokenHashStringHash unidirecional do refresh token ativo da sessão
deviceIdString?Identificador estável do dispositivo, quando informado pelo cliente
deviceNameString?Nome exibível do dispositivo
userAgentString?User agent capturado no login ou refresh
ipAddressString?IP capturado no login ou refresh
statusUserSessionStatusEstado manual da sessão. Default: ACTIVE
lastUsedAtDateTimeÚltima vez em que a sessão foi usada em autenticação ou refresh
refreshExpiresAtDateTimeData limite para uso do refresh token
inactivityExpiresAtDateTime?Data limite por inatividade, quando a política estiver habilitada
revokedAtDateTime?Data de revogação manual ou automática
revokedByUUID?Usuário que revogou a sessão, quando a revogação for manual
revokedReasonString?Motivo técnico ou operacional da revogação
createdByUUID?Usuário que criou a sessão, quando aplicável
createdAtDateTimeData de criação
updatedByUUID?Usuário que fez a última atualização, quando aplicável
updatedAtDateTimeData da última atualização

Relacionamentos

  • Relaciona-se com User

Persistência

UserSession é persistida como estado server-side da autenticação. A aplicação precisa consultar a sessão pelo sid recebido no token e listar sessões por usuário para logout global e gestão de dispositivos.
AcessoCritérioUso
Buscar sessão por tokenuserSessionIdValidar o sid em cada requisição autenticada
Listar sessões do usuáriouserIdExibir dispositivos ativos e executar logout global
Filtrar sessões por audiênciauserId + audienceConsultar sessões abertas por superfície

Regras de Negócio

  • O accessToken não é persistido. Ele carrega sid, sub, aud, type, iat e exp.
  • A sessão não guarda organizationId, membershipId, roles ou permissions. Escopo e autorização são resolvidos pelo Profile e pelas regras do domínio de Authorization.
  • O refresh token nunca é armazenado em texto puro nem com criptografia reversível. Apenas refreshTokenHash é persistido.
  • A cada refresh bem-sucedido, um novo refresh token é emitido e refreshTokenHash é atualizado.
  • EXPIRED não é status persistido. Expiração é calculada por refreshExpiresAt e inactivityExpiresAt.
  • A sessão é inválida quando status = REVOKED, refreshExpiresAt passou ou inactivityExpiresAt passou.
  • Alteração de senha, bloqueio de usuário, logout e logout global revogam sessões atualizando o estado da sessão por sid.
  • A audiência da sessão precisa bater com o aud recebido no token.

Enums

UserSessionAudience

ValorDescrição
CUSTOMERSessão do app ou portal de passageiros
OPSSessão operacional de empresa ou cooperativa
DRIVERSessão do app de motorista
BACKOFFICESessão administrativa da plataforma

UserSessionStatus

ValorDescrição
ACTIVESessão ativa e elegível para autenticação
REVOKEDSessão encerrada manual ou automaticamente

Example

{
  "userSessionId": "0197aa0b-5c2c-79fd-8f62-b5f9b3c5d5cb",
  "userId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "audience": "OPS",
  "refreshTokenHash": "$protected_refresh_token_hash",
  "deviceId": "ios-3E4B9D",
  "deviceName": "iPhone 15 Pro",
  "userAgent": "DEVMOB Ops/1.8.0 iOS",
  "ipAddress": "203.0.113.10",
  "status": "ACTIVE",
  "lastUsedAt": "2026-07-04T14:25:00.000Z",
  "refreshExpiresAt": "2026-08-03T14:00:00.000Z",
  "inactivityExpiresAt": "2026-07-11T14:25:00.000Z",
  "revokedAt": null,
  "revokedBy": null,
  "revokedReason": null,
  "createdBy": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "createdAt": "2026-07-04T14:00:00.000Z",
  "updatedBy": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "updatedAt": "2026-07-04T14:25:00.000Z"
}