شعار أوراباسي
aurabaseمستندات
مستندات›أدلة›Verify a user's JWT

تحقق من JWT للمستخدم في الواجهة الخلفية لديك

يمكن للواجهة الخلفية الخاصة بك التحقق من أن الطلب يأتي من مستخدم مسجل الدخول، مع أي مكتبة JOSE، باستخدام عنوان URL للمشروع فقط.

6 د قراءة·المستوى وسيطة·تمت المراجعة في 25‏/10‏/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. لا تتم مشاركة أي سر مع الواجهة الخلفية لديك، ويتم رفض الرمز المميز لمشروع ما بواسطة مفاتيح مشروع آخر.

يعرض الاستوديو › الإعدادات › API عنوان URL لـ JWKS ومصدر الإصدار وkid الحالي.

#
Node.js

2. Node.js (خوسيه)

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!

// يقوم جوزيه بتخزين المفاتيح مؤقتًا ويعيد جلبها عندما يلتقي بطفل غير معروف (التناوب).
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  # تثبيت النقطة "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. دوران المفتاح

يؤدي تدوير المفتاح في الاستوديو (أو باستخدام 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 ويعيد مطالباته الحقيقية.