شعار أوراباسي
aurabaseمستندات
مستندات›أدلة›User impersonation

انتحال شخصية المستخدم

التصرف نيابة عن أي مستخدم للحصول على الدعم وتصحيح الأخطاء دون طلب كلمة المرور الخاصة به. يقتصر على 10 دقائق، وتدقيقها بدقة في سجلات الأمن.

5 د قراءة·المستوى وسيطة·تمت المراجعة في 26‏/10‏/2026
لقد تغير المصدر الإنجليزي منذ هذه الترجمة. قد تكون بعض المعلومات قديمة.
تمت ترجمة هذه الصفحة تلقائيًا. النسخة الإنجليزية موثوقة.
#
نظرة عامة

ما هو انتحال الشخصية؟

يسمح انتحال شخصية المستخدم للمسؤول أو مهندس الدعم بإنشاء رمز مميز لحامل قصير العمر يعمل كمستخدم محدد. يتيح ذلك إعادة إنتاج أخطاء العملاء، أو التحقق من أذونات سياسة RLS، أو استكشاف مشكلات البيانات وإصلاحها دون طلب بيانات الاعتماد.

يضمن انتحال الشخصية في Aurabase ثلاثة مبادئ أمنية أساسية:

  1. عمر قصير: رموز الانتحال صالحة لمدة تتراوح بين 1 و600 ثانية (10 دقائق كحد أقصى، والافتراضي 300 ثانية). لا تتضمن أبدًا رمزًا مميزًا للتحديث.
  2. إسناد الممثل الصريح: يحمل رمز الوصول المُصدر مطالبة RFC 8693 act القياسية التي تشير إلى من بدأ الجلسة.
  3. التدقيق قبل الإصدار: يتم تسجيل الإجراء في auth_audit_log مع الممثل والسبب والمدة والمستخدم المستهدف قبل يتم إنشاء الرمز المميز على الإطلاق. إذا فشل إدراج السجل، فلن يتم إصدار أي رمز مميز.
#
مطالبات الرمز المميز

RFC 8693 هيكل المطالبة بالقانون

يتم توقيع رمز انتحال الشخصية باستخدام مفتاح ES256 النشط للمشروع ويتوافق مع تنسيق رمز وصول المستخدم القياسي، مع كائن act (ممثل) إضافي:

الحمولة النافعة JWT التي تم فك تشفيرهاjson
{
  "sub": "b2f4c3a1-7788-4e89-a5c2-98e3b1234567",
  "project_id": "ecd48fb4-4fe6-48d0-a8cd-f0641ceb8b1c",
  "role": "authenticated",
  "email": "user@example.com",
  "act": {
    "sub": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  "exp": 1730000300,
  "iat": 1730000000,
  "iss": "https://auth-lab-n7qn5stb.localhost:8080/v1/auth"
}
  • sub: هوية المستخدم الذي يتم انتحال شخصيته. يتم تقييم Postgres RLS (auth.uid()) إلى هذه القيمة.
  • act.sub: هوية المشغل الذي أنشأ الرمز المميز (على سبيل المثال، معرف مستخدم وحدة التحكم أو service_role).
#
واجهة برمجة تطبيقات HTTP

نقطة نهاية المشرف

يتطلب انتحال الشخصية تصريح المسؤول عبر مفتاح service_role أو عامل لديه الدور admin.

Terminalbash
curl -X POST "$AURABASE_URL/v1/auth/admin/users/$TARGET_USER_ID/impersonate" \
  -H "apikey: $AURABASE_SERVICE_ROLE_KEY" \
  -H "Authorization: Bearer $AURABASE_SERVICE_ROLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "Investigating ticket #4812",
    "ttl_seconds": 300,
    "allow_privileged": false
  }'

هيئة الطلب

الميداناكتبمطلوبالوصف
reasonسلسلةخياريمبرر المسجلة في سجلات الأمن. مطلوب للحسابات المستهدفة المميزة (admin/owner).
ttl_secondsرقماختياريعمر الرمز المميز بالثواني (من 1 إلى 600، الافتراضي 300).
allow_privilegedمنطقيةاختيارييجب ضبطه على true إذا كان المستخدم المستهدف لديه دور admin أو owner.

الاستجابة (200 OK)

json
{
  "data": {
    "access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6...",
    "token_type": "Bearer",
    "expires_in": 300,
    "act": {
      "sub": "service_role"
    },
    "user": {
      "id": "b2f4c3a1-7788-4e89-a5c2-98e3b1234567",
      "email": "user@example.com",
      "role": "authenticated"
    }
  }
}
#
SDK

TypeScript SDK

استخدم authAdmin.impersonate() مع عميل Aurabase الذي تم تكوينه باستخدام المفتاح service_role:

admin-debug.tstypescript
import { createClient } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURABASE_URL!, process.env.AURABASE_SERVICE_ROLE_KEY!)

// قم بإنشاء رمز انتحال شخصي لمدة 5 دقائق
const { data, error } = await aura.authAdmin.impersonate('b2f4c3a1-7788-4e89-a5c2-98e3b1234567', {
  reason: 'Reproducing issue reported on dashboard',
  ttlSeconds: 300,
})

if (error) {
  console.error('Failed to impersonate:', error.message)
} else {
  console.log('Impersonation token:', data.access_token)
  console.log('Token expires in:', data.expires_in, 'seconds')

  // قم بإنشاء عميل مستخدم سريع الزوال لتشغيل الاستعلامات باسم هذا المستخدم
  const userClient = createClient(process.env.AURABASE_URL!, process.env.AURABASE_ANON_KEY!, {
    accessToken: data.access_token,
  })

  // سيتم الآن تنفيذ الاستعلامات ضمن سياق RLS الخاص بالمستخدم المستهدف
  const { data: posts } = await userClient.from('posts').select('*')
}
#
الأمن

الحسابات المميزة وسجلات التدقيق

حراسة الحسابات المميزة

تمثل الحسابات المستهدفة التي تمتلك أدوارًا إدارية (مثل role = 'admin' أو role = 'owner' أو app_metadata.roles التي تحتوي على 'admin') أهدافًا عالية القيمة. لمنع رفع الامتيازات بشكل غير مقصود:

  1. يجب عليك تمرير allow_privileged: true بشكل صريح.
  2. يجب توفير سلسلة reason غير فارغة.
  3. إذا فشل أي من التحققين، فسترفض الواجهة الخلفية الطلب باستخدام 403 Forbidden.

سجل التدقيق الأمني

يتم إدراج كل حدث انتحال في جدول auth_audit_log الخاص بالمستأجر:

  • الإجراء: admin_impersonation
  • معرف المستخدم: معرف المستخدم المستهدف
  • البيانات التعريفية: كائن JSON يحتوي على { "actor": "...", "reason": "...", "ttl_seconds": 300, "privileged": false }

يكون هذا المسار مرئيًا في Studio › المصادقة › سجلات التدقيق ويمكن إعادة توجيهه إلى أدوات SIEM عبر مصارف قاعدة البيانات.