Logo Aurabase
aurabasedocumenti
documenti›Guide›Verify a user's JWT

Verifica JWT di un utente nel tuo backend

Il tuo backend può verificare che una richiesta provenga da un utente che ha effettuato l'accesso, con qualsiasi libreria JOSE, utilizzando solo l'URL del progetto.

6 min letto·Livello intermedio·Revisionato il 25 ott 2026
Questo testo inglese è stato generato automaticamente dall'originale francese e non è stato ancora rivisto.
La fonte inglese è cambiata da questa traduzione. Alcune informazioni potrebbero non essere aggiornate.
Questa pagina è stata tradotta automaticamente. Fa fede la versione inglese.
#
Gettoni

1. Come vengono firmati i token

Ogni progetto ha la propria chiave ES256 (ECDSA P-256). L'intestazione del token di accesso contiene kid di quella chiave e le attestazioni contengono:

  • iss: <project URL>/v1/auth (ad esempio https://my-app-x1y2z3.aurabase.cloud/v1/auth),
  • aud: l'identificatore del progetto,
  • sub: l'ID utente, più role, email, app_metadata e user_metadata.

Le chiavi pubbliche vengono servite, senza alcuna chiave API, su <project URL>/.well-known/jwks.json. Nessun segreto è condiviso con il tuo backend e un token di un progetto viene rifiutato dalle chiavi di un altro.

Studio › Impostazioni › L'API mostra l'URL JWKS, l'emittente e l'attuale kid.

#
Node.js

2. Node.js (jose)

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 memorizza nella cache le chiavi e le recupera quando incontra un bambino sconosciuto (rotazione).
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 è l'ID utente
}
#
Pitone

3. Python (PyJWT)

verify.pypython
import os
import jwt  # pip installa "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,
    )
#
Vai

4. Vai

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
}
#
Rotazione

5. Rotazione della chiave

Ruotando la chiave in Studio (o con POST /v1/auth/admin/signing-keys/rotate e la chiave service_role) viene creata una nuova chiave per firmare ogni nuovo token. La chiave precedente rimane nel JWKS per 24 ore, quindi i token firmati prima della rotazione continuano a verificare; una chiave trapelata può essere revocata con DELETE /v1/auth/admin/signing-keys/<kid> una volta che non è più quella attiva, quindi viene rimossa dal JWKS e rifiutata.

Informazioni

Nell'SDK JavaScript, aura.auth.getClaims() verifica già il token di sessione localmente con questo JWKS e restituisce le sue affermazioni reali.

Ultimo aggiornamento · 25 ott 2026