Vérifiez le JWT d'un utilisateur dans votre backend
Votre propre backend peut vérifier qu'une demande provient d'un utilisateur connecté, avec n'importe quelle bibliothèque JOSE, en utilisant uniquement l'URL du projet.
6 min de lecture·Niveau intermédiaire·Révisé le 25 oct. 2026
Ce texte anglais a été généré automatiquement à partir de l’original français et n’a pas encore été relu.
La source anglaise a changé depuis cette traduction. Certaines informations peuvent être en retard.
Cette page a été traduite automatiquement. La version anglaise fait foi.
#Jetons
1. Comment les jetons sont signés
Chaque projet possède sa propre clé ES256 (ECDSA P-256). L'en-tête du jeton d'accès porte le kid de cette clé, et les revendications portent :
iss: <project URL>/v1/auth (par exemple https://my-app-x1y2z3.aurabase.cloud/v1/auth),
aud: l'identifiant du projet,
sub: l'identifiant de l'utilisateur, plus role, email, app_metadata et user_metadata.
Les clés publiques sont servies, sans aucune clé API, à <project URL>/.well-known/jwks.json. Aucun secret n'est partagé avec votre backend et un token d'un projet est rejeté par les clés d'un autre.
Studio › Paramètres › API affiche l'URL JWKS, l'émetteur et le kid actuel.
#Noeud.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!
// José met en cache les clés et les récupère lorsqu'il rencontre un enfant inconnu (rotation).
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 est l'identifiant de l'utilisateur
}
verify.pypython
import os
import jwt # pip installe "pyjwt[crypto]"
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,
)
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
}
#Rotation
5. Rotation des clés
La rotation de la clé dans Studio (ou avec POST /v1/auth/admin/signing-keys/rotate et la clé service_role) crée une nouvelle clé signant chaque nouveau jeton. La clé précédente reste dans le JWKS pendant 24 heures, donc les jetons signés avant la rotation continuent d'être vérifiés ; une clé qui a fui peut être révoquée avec DELETE /v1/auth/admin/signing-keys/<kid> une fois qu'elle n'est plus active, puis est supprimée du JWKS et refusée.
Informations
Dans le SDK JavaScript, aura.auth.getClaims() vérifie déjà le jeton de session localement avec ce JWKS et renvoie ses véritables revendications.
Dernière mise à jour · 25 oct. 2026