Логотип Аурабаза
аурабазадокументы
документы›Путеводители›Verify a user's JWT

Проверьте JWT пользователя в своем серверном интерфейсе.

Ваш собственный бэкэнд может проверить, поступает ли запрос от вошедшего в систему пользователя с помощью любой библиотеки JOSE, используя только URL-адрес проекта.

6 мин читать·Уровень средний·Пересмотрено 25 окт. 2026 г.
Этот текст на английском языке был создан автоматически на основе французского оригинала и еще не проверялся.
Английский источник изменился после этого перевода. Некоторая информация может быть устаревшей.
Эта страница была переведена автоматически. Английская версия является авторитетной.
#
Токены

1. Как подписываются токены

Каждый проект имеет свой собственный ключ ES256 (ECDSA P-256). Заголовок токена доступа содержит kid этого ключа, а утверждения содержат:

  • iss: <project URL>/v1/auth (например https://my-app-x1y2z3.aurabase.cloud/v1/auth),
  • aud: идентификатор проекта,
  • sub: идентификатор пользователя плюс role, email, app_metadata и user_metadata.

Открытые ключи передаются без ключа API по адресу <project URL>/.well-known/jwks.json. Никакой секрет не передается вашему бэкэнду, а токен одного проекта отклоняется ключами другого.

Studio › Настройки › API показывает URL-адрес JWKS, эмитента и текущий kid.

#
Node.js

2. Node.js (хосе)

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

const PROJECT_URL = process.env.AURABASE_URL! // https://<слаг>.aurabase.cloud
const PROJECT_ID = process.env.AURABASE_PROJECT_ID!

// Хосе кэширует ключи и выполняет повторную выборку, когда встречает неизвестного ребенка (ротация).
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 — идентификатор пользователя
}
#
Питон

3. Питон (PyJWT)

verify.pypython
import os
import jwt  # pip install "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,
    )
#
Идти

4. Иди

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
}
#
Вращение

5. Вращение ключей

Вращение ключа в Studio (или с помощью POST /v1/auth/admin/signing-keys/rotate и service_role) приводит к тому, что каждый новый токен подписывается новым ключом. Предыдущий ключ остается в JWKS в течение 24 часов, поэтому токены, подписанные до ротации, продолжают проверяться; Утечка ключа может быть отозвана с помощью DELETE /v1/auth/admin/signing-keys/<kid>, как только он перестанет быть активным, а затем будет удален из JWKS и отклонен.

Информация

В JavaScript SDK aura.auth.getClaims() уже проверяет токен сеанса локально с помощью этого JWKS и возвращает его реальные утверждения.

Последнее обновление · 25 окт. 2026 г.