Aura Logo
aurabasedocumentos
documentos›Guias›Verify a user's JWT

Verifique o JWT de um usuário em seu back-end

Seu próprio back-end pode verificar se uma solicitação vem de um usuário conectado, com qualquer biblioteca JOSE, usando apenas a URL do projeto.

6 min lido·Nível intermediário·Revisado em 25 de out. de 2026
Este texto em inglês foi gerado automaticamente a partir do original em francês e ainda não foi revisado.
A fonte em inglês mudou desde esta tradução. Algumas informações podem estar desatualizadas.
Esta página foi traduzida automaticamente. A versão em inglês é oficial.
#
Fichas

1. Como os tokens são assinados

Cada projeto possui sua própria chave ES256 (ECDSA P-256). O cabeçalho do token de acesso carrega o kid dessa chave e as declarações carregam:

  • iss: <project URL>/v1/auth (por exemplo https://my-app-x1y2z3.aurabase.cloud/v1/auth),
  • aud: o identificador do projeto,
  • sub: o ID do usuário, mais role, email, app_metadata e user_metadata.

As chaves públicas são servidas, sem qualquer chave de API, em <project URL>/.well-known/jwks.json. Nenhum segredo é compartilhado com seu back-end e um token de um projeto é rejeitado pelas chaves de outro.

Studio › Configurações › API mostra o URL JWKS, o emissor e o kid atual.

#
Node.js

2. Node.js (josé)

verify.tstypescript
import { createRemoteJWKSet, jwtVerify } from 'jose'

const PROJECT_URL = process.env.AURABASE_URL! // https://<slug>.aurabase.cloud
const PROJECT_ID = process.env.AURABASE_PROJECT_ID!

// jose armazena as chaves em cache e busca novamente quando encontra uma criança desconhecida (rotação).
const jwks = createRemoteJWKSet(new URL(`${PROJECT_URL}/.well-known/jwks.json`))

export async function verifyAccessToken(token: string) {
  const { payload } = await jwtVerify(token, jwks, {
    issuer: `${PROJECT_URL}/v1/auth`,
    audience: PROJECT_ID,
    algorithms: ['ES256'],
  })
  return payload // payload.sub é o ID do usuário
}
#
Pitão

3.Python (PyJWT)

verify.pypython
import os
import jwt  # pip instalar "pyjwt[cripto]"

PROJECT_URL = os.environ["AURABASE_URL"]
PROJECT_ID = os.environ["AURABASE_PROJECT_ID"]
jwks = jwt.PyJWKClient(f"{PROJECT_URL}/.well-known/jwks.json")

def verify_access_token(token: str) -> dict:
    key = jwks.get_signing_key_from_jwt(token).key
    return jwt.decode(
        token,
        key,
        algorithms=["ES256"],
        issuer=f"{PROJECT_URL}/v1/auth",
        audience=PROJECT_ID,
    )
#
Vá

4. Vá

verify.gogo
package main

import (
	"fmt"
	"os"

	"github.com/MicahParks/keyfunc/v3"
	"github.com/golang-jwt/jwt/v5"
)

func verify(token string) (jwt.MapClaims, error) {
	projectURL := os.Getenv("AURABASE_URL")
	jwks, err := keyfunc.NewDefault([]string{projectURL + "/.well-known/jwks.json"})
	if err != nil {
		return nil, err
	}
	claims := jwt.MapClaims{}
	_, err = jwt.ParseWithClaims(token, claims, jwks.Keyfunc,
		jwt.WithValidMethods([]string{"ES256"}),
		jwt.WithIssuer(projectURL+"/v1/auth"),
		jwt.WithAudience(os.Getenv("AURABASE_PROJECT_ID")),
	)
	if err != nil {
		return nil, fmt.Errorf("invalid token: %w", err)
	}
	return claims, nil
}
#
Rotação

5. Rotação de chave

Girar a chave no Studio (ou com POST /v1/auth/admin/signing-keys/rotate e a chave service_role) faz com que uma nova chave assine a cada novo token. A chave anterior permanece no JWKS por 24 horas, então os tokens assinados antes da rotação continuam sendo verificados; uma chave que vazou pode ser revogada com DELETE /v1/auth/admin/signing-keys/<kid> quando não for mais a chave ativa, e então removida do JWKS e recusada.

Informações

No JavaScript SDK, aura.auth.getClaims() já verifica o token de sessão localmente com este JWKS e retorna suas declarações reais.

Última atualização · 25 de out. de 2026