Логотип Аурабаза
аурабазадокументы
документы›Путеводители›User impersonation

Олицетворение пользователя

Действуйте от имени любого пользователя для поддержки и отладки, не запрашивая его пароль. Ограничено 10 минутами, строго проверяется в журналах безопасности.

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

Что такое олицетворение?

Олицетворение пользователя позволяет администратору или инженеру службы поддержки создавать кратковременный токен носителя, который действует как конкретный пользователь. Это позволяет воспроизводить ошибки клиентов, проверять разрешения политики RLS или устранять проблемы с данными без запроса учетных данных.

Олицетворение в Aurabase гарантирует три фундаментальных принципа безопасности:

  1. Короткий срок действия: токены олицетворения действительны от 1 до 600 секунд (максимум 10 минут, по умолчанию 300 секунд). Они никогда не включают токен обновления.
  2. Явное присвоение субъекта: выданный токен доступа содержит стандартное утверждение RFC 8693 act, указывающее, кто инициировал сеанс.
  3. Аудит перед выпуском: действие записывается в auth_audit_log с указанием исполнителя, причины, продолжительности и целевого пользователя до того, как токен будет сгенерирован. Если вставка журнала не удалась, токен не выдается.
#
Заявки на токены

Структура утверждения закона RFC 8693

Токен олицетворения подписывается активным ключом ES256 проекта и соответствует стандартному формату токена доступа пользователя с дополнительным объектом act (актёр):

Декодированная полезная нагрузка JWTjson
{
  "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 API

Конечная точка администратора

Для олицетворения требуется авторизация администратора с помощью ключа 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 через стоки базы данных.

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