Aurabase-logo
aurabasisdocumenten
documenten›Gidsen›User impersonation

Imitatie van gebruiker

Handel namens elke gebruiker voor ondersteuning en foutopsporing zonder om zijn wachtwoord te vragen. Beperkt tot 10 minuten, strikt gecontroleerd in beveiligingslogboeken.

5 min lezen·Niveau tussenproduct·Herzien op 26 okt 2026
De Engelse bron is sinds deze vertaling veranderd. Sommige informatie kan verouderd zijn.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.
#
Overzicht

Wat is nabootsing?

Met gebruikersimitatie kan een beheerder of ondersteuningstechnicus een kortstondig dragertoken genereren dat als een specifieke gebruiker fungeert. Dit maakt het reproduceren van bugs van klanten mogelijk, het controleren van RLS beleidsmachtigingen of het oplossen van gegevensproblemen zonder om inloggegevens te vragen.

Nabootsing van identiteit in Aurabase garandeert drie fundamentele beveiligingsprincipes:

  1. Korte levensduur: Imitatietokens zijn geldig tussen 1 en 600 seconden (maximaal 10 minuten, standaard 300 seconden). Ze bevatten nooit een vernieuwingstoken.
  2. Expliciete actortoeschrijving: Het uitgegeven toegangstoken draagt de standaard RFC 8693 act-claim die aangeeft wie de sessie heeft geïnitieerd.
  3. Audit vóór uitgifte: De actie wordt vastgelegd in auth_audit_log met de actor, reden, duur en doelgebruiker voordat het token ooit wordt gegenereerd. Als het invoegen van het logboek mislukt, wordt er geen token uitgegeven.
#
Tokenclaims

RFC 8693-claimstructuur

Een imitatietoken wordt ondertekend met de actieve ES256-sleutel van het project en voldoet aan het standaard gebruikerstoegangstokenformaat, met een extra act (actor) object:

Gedecodeerde JWT-payloadjson
{
  "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: De identiteit van de gebruiker die wordt nagebootst. Postgres RLS (auth.uid()) resulteert in deze waarde.
  • act.sub: De identiteit van de operator die het token heeft gegenereerd (bijvoorbeeld consolegebruikers-ID of service_role).
#
HTTP-API

Beheerdereindpunt

Voor nabootsing van identiteit is beheerdersautorisatie vereist via een service_role-sleutel of een operator met de rol 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
  }'

Lichaam aanvragen

VeldTypVereistBeschrijving
reasontouwtjeOptioneelRechtvaardiging vastgelegd in beveiligingslogboeken. Vereist voor geprivilegieerde doelaccounts (admin/owner).
ttl_secondsnummerOptioneelLevensduur van token in seconden (1 tot 600, standaard 300).
allow_privilegedBooleaansOptioneelMoet worden ingesteld op true als de doelgebruiker een rol admin of owner heeft.

Reactie (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

Gebruik authAdmin.impersonate() met een Aurabase-client geconfigureerd met de sleutel service_role:

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

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

// Genereer een imitatietoken gedurende 5 minuten
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')

  // Maak een kortstondige gebruikersclient om query's uit te voeren als deze gebruiker
  const userClient = createClient(process.env.AURABASE_URL!, process.env.AURABASE_ANON_KEY!, {
    accessToken: data.access_token,
  })

  // Query's worden nu uitgevoerd onder de RLS-context van de doelgebruiker
  const { data: posts } = await userClient.from('posts').select('*')
}
#
Beveiliging

Bevoorrechte accounts en auditlogboeken

Bevoorrechte accounts bewaken

Doelaccounts met beheerdersrollen (zoals role = 'admin', role = 'owner' of app_metadata.roles met 'admin') vertegenwoordigen waardevolle doelen. Om onbedoelde bevoegdheidsverhoging te voorkomen:

  1. U moet expliciet allow_privileged: true doorgeven.
  2. Er moet een niet-lege tekenreeks reason worden opgegeven.
  3. Als een van beide controles mislukt, wijst de backend het verzoek af met 403 Forbidden.

Beveiligingsauditlogboek

Elke imitatiegebeurtenis wordt ingevoegd in de tabel auth_audit_log van de tenant:

  • Actie: admin_impersonation
  • Gebruikers-ID: ID van de doelgebruiker
  • Metagegevens: JSON-object met { "actor": "...", "reason": "...", "ttl_seconds": 300, "privileged": false }

Dit spoor is zichtbaar in Studio › Authenticatie › Auditlogboeken en kan via database drains worden doorgestuurd naar SIEM-tools.

Laatst bijgewerkt · 26 okt 2026