Aurabase-logo
aurabasisdocumenten
documenten›Gidsen›Verify a user's JWT

Controleer de JWT van een gebruiker in uw backend

Uw eigen backend kan bij elke JOSE-bibliotheek controleren of een verzoek afkomstig is van een aangemelde gebruiker, waarbij alleen de project-URL wordt gebruikt.

6 min lezen·Niveau tussenproduct·Herzien op 25 okt 2026
Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
De Engelse bron is sinds deze vertaling veranderd. Sommige informatie kan verouderd zijn.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.
#
Tokens

1. Hoe tokens worden ondertekend

Elk project heeft zijn eigen ES256 (ECDSA P-256) sleutel. De header van het toegangstoken bevat de kid van die sleutel, en de claims bevatten:

  • iss: <project URL>/v1/auth (bijvoorbeeld https://my-app-x1y2z3.aurabase.cloud/v1/auth),
  • aud: de project-ID,
  • sub: het gebruikers-ID, plus role, email, app_metadata en user_metadata.

De openbare sleutels worden, zonder enige API-sleutel, aangeboden op <project URL>/.well-known/jwks.json. Er wordt geen geheim gedeeld met uw backend, en een token van het ene project wordt afgewezen door de sleutels van een ander project.

Studio › Instellingen › API toont de JWKS-URL, de uitgever en de huidige kid.

#
Knooppunt.js

2. Knooppunt.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 bewaart de sleutels in het cachegeheugen en haalt deze opnieuw op wanneer hij een onbekend kind tegenkomt (rotatie).
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 is het gebruikers-ID
}
#
Python

3. Python (PyJWT)

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

4. Ga

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

5. Sleutelrotatie

Door de sleutel in Studio te draaien (of met POST /v1/auth/admin/signing-keys/rotate en de service_role sleutel) wordt voor elk nieuw token een nieuw sleutelteken gemaakt. De vorige sleutel blijft 24 uur in de JWKS, dus tokens die vóór de rotatie zijn ondertekend, blijven verifiëren; een gelekte sleutel kan worden ingetrokken met DELETE /v1/auth/admin/signing-keys/<kid> zodra deze niet langer de actieve is, en wordt vervolgens uit de JWKS verwijderd en geweigerd.

Info

In de JavaScript SDK verifieert aura.auth.getClaims() het sessietoken al lokaal met deze JWKS en retourneert de echte claims.

Laatst bijgewerkt · 25 okt 2026