Logotipo de Aurabase
aurabasedocumentos
documentos›Guías›Verify a user's JWT

Verificar el JWT de un usuario en su backend

Su propio backend puede comprobar que una solicitud proviene de un usuario que ha iniciado sesión, con cualquier biblioteca JOSE, utilizando únicamente la URL del proyecto.

6 min leer·Nivel intermedio·Revisado el 25 oct 2026
Este texto en inglés se generó automáticamente a partir del original en francés y aún no ha sido revisado.
La fuente en inglés ha cambiado desde esta traducción. Es posible que parte de la información esté desactualizada.
Esta página fue traducida automáticamente. La versión en inglés es autorizada.
#
Fichas

1. Cómo se firman los tokens

Cada proyecto tiene su propia clave ES256 (ECDSA P-256). El encabezado del token de acceso lleva el kid de esa clave y los reclamos llevan:

  • iss: <project URL>/v1/auth (por ejemplo https://my-app-x1y2z3.aurabase.cloud/v1/auth),
  • aud: el identificador del proyecto,
  • sub: la identificación del usuario, más role, email, app_metadata y user_metadata.

Las claves públicas se entregan, sin ninguna clave API, en <project URL>/.well-known/jwks.json. No se comparte ningún secreto con su backend y las claves de otro rechazan un token de un proyecto.

Studio › Configuración › API muestra la URL de JWKS, el emisor y el kid actual.

#
Nodo.js

2. Node.js (josé)

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

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

// José guarda las llaves en caché y las vuelve a buscar cuando se encuentra con un niño desconocido (rotación).
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 es la identificación del usuario
}
#
pitón

3.Python (PyJWT)

verify.pypython
import os
import jwt  # instalación de pip "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,
    )
#
ir

4. Ir

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
}
#
Rotación

5. Rotación de claves

Al girar la clave en Studio (o con POST /v1/auth/admin/signing-keys/rotate y la clave service_role) se crea una nueva clave para cada nuevo token. La clave anterior permanece en el JWKS durante 24 horas, por lo que los tokens firmados antes de la rotación se siguen verificando; una clave que se filtró se puede revocar con DELETE /v1/auth/admin/signing-keys/<kid> una vez que ya no es la activa, y luego se elimina del JWKS y se rechaza.

Información

En el SDK de JavaScript, aura.auth.getClaims() ya verifica el token de sesión localmente con este JWKS y devuelve sus afirmaciones reales.

Última actualización · 25 oct 2026