Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Kılavuzlar›User impersonation

Kullanıcı Kimliğine Bürünme

Destek ve hata ayıklama için herhangi bir kullanıcının şifresini sormadan onun adına hareket edin. 10 dakikayla sınırlı, güvenlik kayıtlarında sıkı bir şekilde denetleniyor.

5 dk. oku·Seviye orta düzey·26 Eki 2026 tarihinde revize edildi
Bu çeviriden bu yana İngilizce kaynak değişti. Bazı bilgiler güncelliğini kaybetmiş olabilir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Genel Bakış

Kimliğe bürünme nedir?

Kullanıcı kimliğine bürünme, bir yöneticinin veya destek mühendisinin, belirli bir kullanıcı gibi davranan kısa ömürlü bir taşıyıcı jeton oluşturmasına olanak tanır. Bu, kimlik bilgileri istemeden müşteri hatalarının yeniden oluşturulmasına, RLS politika izinlerinin kontrol edilmesine veya veri sorunlarının giderilmesine olanak tanır.

Aurabase'de kimliğe bürünme üç temel güvenlik ilkesini garanti eder:

  1. Kısa ömür: Kimliğe bürünme belirteçleri 1 ile 600 saniye arasında geçerlidir (maksimum 10 dakika, varsayılan 300 saniye). Hiçbir zaman yenileme belirteci içermezler.
  2. Açık aktör ilişkilendirmesi: Verilen erişim belirteci, oturumu kimin başlattığını belirten standart RFC 8693 act talebini taşır.
  3. Düzenlemeden önce denetim: Eylem, belirteç oluşturulmadan önce aktör, neden, süre ve hedef kullanıcıyla birlikte auth_audit_log'ye kaydedilir. Günlük ekleme işlemi başarısız olursa belirteç verilmez.
#
Jeton Talepleri

RFC 8693 kanunu talep yapısı

Bir kimliğe bürünme belirteci, projenin etkin ES256 anahtarıyla imzalanır ve ek bir act (aktör) nesnesiyle standart kullanıcı erişim belirteci biçimine uygundur:

JWT yükünün kodu çözüldü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: Kimliğine bürünülen kullanıcının kimliği. Postgres RLS (auth.uid()) bu değeri değerlendirir.
  • act.sub: Belirteci oluşturan operatörün kimliği (ör. konsol kullanıcı kimliği veya service_role).
#
HTTP API'si

Yönetici uç noktası

Kimliğe bürünme, service_role anahtarı veya admin rolüne sahip bir operatör aracılığıyla yönetici yetkilendirmesi gerektirir.

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
  }'

Talep gövdesi

AlanTürGerekliAçıklama
reasondizeİsteğe bağlıGerekçe güvenlik kayıtlarına kaydedildi. Ayrıcalıklı hedef hesaplar için gerekli (admin/owner).
ttl_secondssayıİsteğe bağlıSaniye cinsinden belirteç ömrü (1 - 600, varsayılan 300).
allow_privilegedbooleanİsteğe bağlıHedef kullanıcının admin veya owner rolü varsa true olarak ayarlanmalıdır.

Yanıt (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'sı

TypeScript SDK'sı

authAdmin.impersonate() öğesini, service_role anahtarıyla yapılandırılmış bir Aurabase istemcisiyle kullanın:

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

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

// 5 dakika boyunca kimliğe bürünme jetonu oluşturun
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')

  // Sorguları bu kullanıcı olarak çalıştırmak için geçici bir kullanıcı istemcisi oluşturun
  const userClient = createClient(process.env.AURABASE_URL!, process.env.AURABASE_ANON_KEY!, {
    accessToken: data.access_token,
  })

  // Sorgular artık hedef kullanıcının RLS bağlamı altında yürütülecek
  const { data: posts } = await userClient.from('posts').select('*')
}
#
Güvenlik

Ayrıcalıklı hesaplar ve denetim günlükleri

Ayrıcalıklı hesapları koruma

Yönetim rollerine sahip hedef hesaplar (örneğin role = 'admin', role = 'owner' veya 'admin' içeren app_metadata.roles ) yüksek değerli hedefleri temsil eder. Yanlışlıkla ayrıcalık yükselmesini önlemek için:

  1. Açıkça allow_privileged: true kodunu iletmelisiniz.
  2. Boş olmayan bir reason dizesi sağlanmalıdır.
  3. Her iki kontrol de başarısız olursa, arka uç isteği 403 Forbidden ile reddeder.

Güvenlik denetim günlüğü

Her kimliğe bürünme olayı kiracının auth_audit_log tablosuna eklenir:

  • Eylem: admin_impersonation
  • Kullanıcı Kimliği: Hedef kullanıcının kimliği
  • Meta Veri: { "actor": "...", "reason": "...", "ttl_seconds": 300, "privileged": false } içeren JSON nesnesi

Bu iz Studio › Kimlik Doğrulama › Denetim günlükleri'de görülebilir ve veritabanı kanalları aracılığıyla SIEM araçlarına iletilebilir.