Class SessionTokenService

java.lang.Object
br.com.xadm.comum.seguranca.SessionTokenService

@Singleton @Requires(property="auth.session-secret", pattern=".+") public class SessionTokenService extends Object
Emite e verifica JWTs HS256 usados como cookie de sessão das views.

Segredo via AuthSettings.getSessionSecret() (env AUTH_SESSION_SECRET; mínimo 32 chars — exigência do MACSigner). Tokens carregam claims sub, email, name, iss, iat, exp, jti. O iss vem de AuthSettings.getIssuer() (env AUTH_ISSUER) — config por-app, a lib não fixa o tenant (reconciliação onda-2: antes hardcoded por cópia).

Bean condicional: só é instanciado quando auth.session-secret está configurado. Em modo dev/test sem segredo, a auth das views fica em bypass. Gate pattern = ".+" (0.7.3): reprova a property ausente e a declarada-vazia.

  • Constructor Details

    • SessionTokenService

      public SessionTokenService(AuthSettings settings)
      Cria o serviço de sessão com relógio do sistema.
      Parameters:
      settings - configurações de auth.
  • Method Details

    • issueSession

      public String issueSession(String uid, String email, String name)
      Emite JWT HS256 com TTL configurado em AuthSettings.getSessionTtlSeconds().
      Parameters:
      uid - identificador do usuário (sub).
      email - email do usuário.
      name - nome do usuário.
      Returns:
      o token JWT serializado.
    • issueSession

      public String issueSession(String uid, String email, String name, String role)
      Emite JWT HS256 com um papel extra carimbado no claim role — usado por principais não-humanos (o smoke do SmokeSessionController), que precisam ser distinguíveis de uma sessão de usuário depois de emitidas. Claim ausente ⇒ sessão de usuário comum (o SessionAuthenticationFetcher dá só ROLE_VIEW).

      O nome do claim é role — canônico da casa (contrato do catálogo de papéis do ADR 0029, chave do grant no central-backend, auth.parameter('role') das sync rules do PowerSync). Um segundo nome para o mesmo conceito falha em silêncio: um gate que lê role contra um token que carrega outra chave não dá erro — libera.

      Parameters:
      uid - identificador do usuário (sub).
      email - email do usuário.
      name - nome do usuário.
      role - papel extra (ex.: ROLE_SMOKE); null/em branco não vira claim.
      Returns:
      o token JWT serializado.
    • verify

      Verifica assinatura, iss == AuthSettings.getIssuer() e exp > now.
      Parameters:
      token - o JWT serializado.
      Returns:
      os claims da sessão válida.
      Throws:
      AuthException - código "invalid_session" em qualquer falha (assinatura inválida, iss divergente, expirado, parse error).