Перейти к содержимому
Guide

Агенты ИИ вызывают ваш API: 5 ошибок аутентификации, которые создают бэкдоры

| 9 min read

80% команд используют ИИ-агенты в производстве, но только 22% рассматривают их как независимые личности. Пять ошибок аутентификации, которые превращают ваш API в открытую дверь.

Digital padlock on circuit board representing API authentication security
Photo by Adi Goldstein on Unsplash

Опрос, проведенный в 2026 году среди более чем 900 практиков, показал, что 80,9% инженерных команд используют агенты искусственного интеллекта при тестировании или производстве. Тот же опрос показал, что только 21,9% рассматривают этих агентов как независимые субъекты, обладающие идентификационными данными. Остальные делят учетные данные, пропускать контрольные журналы и предоставлять общий доступ API к коду, который выполняется без присмотра.

Этот пробел является проблемой безопасности. OWASP опубликовала список 10 лучших агентских приложений в 2026 году, а также информацию о неправильном использовании инструментов и Повышение привилегий возглавляет список с 520 зарегистрированными инцидентами. Meta задокументировала мошеннического ИИ-агента, который прошел все проверка личности, поскольку она содержала действительные учетные данные из сценария запутанного депутата. 48,9% организаций не могут даже посмотреть, что их агенты делают с доступом к API.

В этом посте рассказывается о пяти ошибках аутентификации, которые превращают ваш API в открытую дверь для агентов ИИ, и о том, как закрыть каждую из них. один с рабочим кодом.

Ошибка 1: использование одного ключа API для всех агентов

44% команд используют статические ключи API для ИИ-агентов. Когда несколько агентов используют один ключ, вы теряете три вещи: аудит следы (какой агент сделал этот запрос?), детальный отзыв (отзыв одного агента убивает их всех) и ограничение скорости на агента (один вышедший из-под контроля агент исчерпывает квоту для каждого агента).

# Three different agents share one API key
# Agent A: summarizes support tickets
# Agent B: processes refunds
# Agent C: exports customer PII

curl -X POST https://api.acme.com/v1/customers/export \\
  -H "Authorization: Bearer sk_live_shared_key_for_all_agents" \\
  -H "Content-Type: application/json" \\
  -d '{"format": "csv", "include_pii": true}'

# Which agent made this request? You can't tell.
# Need to revoke Agent C? You break A and B too.

Исправление: выдайте уникальные учетные данные для каждого агента. Каждый ключ соответствует определенному идентификатору агента, определенному объему конечные точки и собственный предел скорости. Когда вам нужно отозвать агент C, агенты A и B продолжают работать.

# Each agent gets its own scoped API key
curl -X POST https://api.acme.com/v1/tickets/summary \\
  -H "Authorization: Bearer sk_live_agent_a_tickets_readonly" \\
  -H "X-Agent-ID: agent-ticket-summarizer" \\
  -H "Content-Type: application/json" \\
  -d '{"ticket_id": "TKT-4829"}'

Используйте X-Agent-ID заголовок рядом с ключом API, чтобы ваши журналы всегда приписывали запросы конкретный агент. Раскодируйте токен, чтобы убедиться, что его утверждения соответствуют агенту, совершающему вызов.

# Inspect what permissions an agent token carries
curl -s -X POST https://api.botoi.com/v1/jwt/decode \\
  -H "Content-Type: application/json" \\
  -d '{"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ2VudC1yZWZ1bmQtcHJvY2Vzc29yIiwic2NvcGVzIjpbInJlZnVuZHM6d3JpdGUiLCJvcmRlcnM6cmVhZCJdLCJleHAiOjE3NDk2MDAsMDAwLCJpc3MiOiJhY21lLWF1dGgifQ.signature"}'
{
  "success": true,
  "data": {
    "header": {
      "alg": "RS256",
      "typ": "JWT"
    },
    "payload": {
      "sub": "agent-refund-processor",
      "scopes": ["refunds:write", "orders:read"],
      "exp": 1749600000,
      "iss": "acme-auth"
    }
  }
}

Проблема запутанного депутата: Инцидент с мошенническим агентом Меты произошел потому, что агент удерживал действительные учетные данные, которые предоставили доступ за пределами предполагаемой области. Агент прошел все проверки личности. полномочия были законными. Проблема заключалась в том, что никто не привязывал их к целям агента.

Ошибка 2: предоставление полного доступа к API, когда агенту нужна одна конечная точка

35% организаций полагаются на общие учетные записи служб для агентов ИИ. Сервисный аккаунт с полным доступом к API означает, что ваш агент по суммированию заявок также может обрабатывать возвраты, экспортировать личные данные клиентов и удалять записи. Это принцип наименьшего нарушения привилегий.

Ограничьте каждый токен агента минимальным количеством необходимых конечных точек и действий. Агент по обработке возврата получает refunds:write и orders:read. Ничего больше.

// Mint a scoped token for each agent at deploy time
interface AgentTokenClaims {
  sub: string;          // unique agent identity
  scopes: string[];     // minimum required permissions
  exp: number;          // short TTL: 1-24 hours
  iss: string;          // your auth service
  rate_limit: number;   // requests per minute for this agent
}

const agentClaims: AgentTokenClaims = {
  sub: "agent-refund-processor",
  scopes: ["refunds:write", "orders:read"],
  exp: Math.floor(Date.now() / 1000) + 3600, // 1 hour
  iss: "acme-auth",
  rate_limit: 30,
};

Перед развертыванием агента убедитесь, что его токен имеет правильные области действия и срок его действия не истек. Расшифруйте токен с конечной точкой Botoi JWT для проверки утверждений и is_expired флаг.

# Decode the token and check expiry before trusting claims
curl -s -X POST https://api.botoi.com/v1/jwt/decode \\
  -H "Content-Type: application/json" \\
  -d '{
    "token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZ2VudC10aWNrZXQtc3VtbWFyaXplciIsInNjb3BlcyI6WyJ0aWNrZXRzOnJlYWQiXSwiZXhwIjoxNzQ5Njg2NDAwfQ.abc123"
  }'
{
  "success": true,
  "data": {
    "header": {
      "alg": "HS256",
      "typ": "JWT"
    },
    "payload": {
      "sub": "agent-ticket-summarizer",
      "scopes": ["tickets:read"],
      "exp": 1749686400
    },
    "signature": "abc123",
    "is_expired": false,
    "expires_at": "2025-06-11T22:40:00.000Z",
    "expires_in_seconds": 3600
  }
}
Подход Контроль объема отзыв Аудиторский след Риск
Общий сервисный аккаунт Никто Ломает всех агентов Нет указания авторства Высокий
Статический ключ API для каждого агента Только ключевой уровень Для каждого агента По ключу Середина
Ограниченный JWT для каждого агента Конечная точка + действие Для каждого агента + срок действия Полные претензии Низкий
Обмен токенов OBO Наследственный + суженный За сеанс Полная цепочка Самый низкий

Новые решения IAM для агентов искусственного интеллекта поддерживают обмен токенами от имени (OBO). Агент получает токен полученный из сеанса исходного пользователя, автоматически ограничивается разрешениями, предоставленными пользователем. Это подход создает полную цепочку авторизации от пользователя к агенту и API.

Ошибка 3: срок действия учетных данных агента не истекает.

43% команд используют аутентификацию по имени пользователя и паролю для агентов ИИ. Эти полномочия не имеют срока действия. Статический API ключи также не имеют срока действия, если только вы не встроите срок действия в свою систему. Учетные данные агента, которые живут вечно — это учетные данные, которые могут быть украдены, утекли в журналы или помещены в репозиторий и использованы месяцами позже.

Установите максимальный срок жизни для токенов агента от 1 до 24 часов. Создавайте новые учетные данные при каждом развертывании или на график. Используйте генератор паролей Botoi для создания секретов с высокой энтропией для подписи HMAC.

# Generate a high-entropy secret for HMAC signing
curl -s -X POST https://api.botoi.com/v1/password/generate \\
  -H "Content-Type: application/json" \\
  -d '{"length": 64, "uppercase": true, "lowercase": true, "numbers": true, "symbols": false}'
{
  "success": true,
  "data": {
    "password": "kX9mT2vR8nL4wQ6jY3bA5cF7hD1gP0sE9uI2oK4lM6nB8xZ3vC5tR7yW0qJ1aG"
  }
}

Добавить подпись запроса HMAC

Помимо аутентификации на основе токенов, подпишите каждую полезную нагрузку запроса с помощью HMAC-SHA256. Ваш API проверяет подпись перед обработка запроса. Это доказывает, что полезная нагрузка не была изменена при передаче, и привязывает каждый запрос к секрет конкретного агента.

# Sign a request payload so your API can verify the sender
PAYLOAD='{"agent_id":"agent-refund-processor","action":"refund","order_id":"ORD-7291"}'

curl -s -X POST https://api.botoi.com/v1/hash/hmac \\
  -H "Content-Type: application/json" \\
  -d "{
    \\"text\\": \\"$PAYLOAD\\",
    \\"key\\": \\"kX9mT2vR8nL4wQ6jY3bA5cF7hD1gP0sE9uI2oK4lM6nB8xZ3vC5tR7yW0qJ1aG\\",
    \\"algorithm\\": \\"sha256\\"
  }"
{
  "success": true,
  "data": {
    "hmac": "a3f8c2d1e5b7094f6d2c8a1e3b5f7d9e4c6a8b0d2f4e6c8a0b2d4f6e8c0a2b4",
    "algorithm": "sha256"
  }
}

Ваш сервер API пересчитывает HMAC, используя сохраненную копию секрета агента. Если хэши совпадают, запрос подлинный. Если они этого не делают, отклоните это.

Автоматизируйте секретную ротацию

Ручная ротация не масштабируется, если вы запускаете десятки агентов. Создайте сценарий ротации, который генерирует новый секретный, развертывает его, проверяет подключение, а затем отзывает старый.

import Botoi from "@botoi/sdk";

const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });

async function rotateAgentSecret() {
  // Generate a new 64-character secret
  const { data } = await botoi.password.generate({
    length: 64,
    uppercase: true,
    lowercase: true,
    numbers: true,
    symbols: false,
  });

  console.log("New secret generated. Deploy to agent, then revoke the old one.");

  // Hash the new secret for storage (never store plaintext)
  const hashed = await botoi.hash.sha256({ input: data.password });
  console.log("Hashed for DB:", hashed.data.hash);

  return { secret: data.password, hash: hashed.data.hash };
}

rotateAgentSecret();

Ошибка 4: пропуск регистрации запросов для межмашинных вызовов

48,9% организаций не видят межмашинного трафика. Они регистрируют вызовы API, выполняемые человеком, но исключают внутренние межсервисная связь из их стека наблюдаемости. Агенты ИИ попадают в это слепое пятно.

Когда агент ведет себя неправильно, отправляет поток запросов, обращается к конечным точкам за пределами его области действия или получает скомпрометирован, нужно ответить на три вопроса: какой агент, когда и чего он коснулся? Без запроса войдя в систему, вы не сможете ответить ни на один из них.

// Express middleware: log every agent request
app.use("/v1/*", (req, res, next) => {
  const agentId = req.headers["x-agent-id"] || "unknown";
  const start = Date.now();

  res.on("finish", () => {
    const log = {
      timestamp: new Date().toISOString(),
      agent_id: agentId,
      method: req.method,
      path: req.path,
      status: res.statusCode,
      duration_ms: Date.now() - start,
      ip: req.ip,
      user_agent: req.headers["user-agent"],
    };
    console.log(JSON.stringify(log));
  });

  next();
});

Захватывайте идентификатор агента, конечную точку, метод HTTP, код состояния и продолжительность каждого запроса. Отправка структурированная журналы на вашей платформе наблюдения. Установите оповещения об аномалиях: внезапные скачки объема запросов, запросы на конечные точки за пределами области действия агента или повышенная частота ошибок.

Отслеживайте то, что отправляет агент, а не то, что он говорит. Зарегистрировать хэш полезной нагрузки запроса (используя /v1/hash) рядом с метаданными. Это дает вам доказательства несанкционированного вмешательства без хранение конфиденциальных полезных данных в вашей системе журналов.

Ошибка 5: относиться к аутентификации агента так же, как к аутентификации человека

Лишь 18% руководителей служб безопасности уверены, что их системы IAM могут управлять идентификационными данными агентов. Другой болт 82% доступ агента к потокам аутентификации человека, которые не были предназначены для автономных вызывающих абонентов.

Человеческая аутентификация предполагает, что человек читает экран согласия OAuth, вводит пароль и отвечает на запрос MFA. Агенты ничем этим не занимаются. Им нужна другая модель аутентификации с тремя свойствами.

1. Токены с определенной областью действия и явными разрешениями.

Каждый токен агента объявляет, какие конечные точки он может вызывать и какие действия он может выполнять. API обеспечивает соблюдение этих возможности по каждому запросу. Нет возможностей, нет доступа.

2. Ограничения скорости для каждого идентификатора

Пользователь-человек отправляет несколько запросов в минуту. Агент отправляет сотни или тысячи. Ограничения ставок на агента личность не позволяет одному агенту морить голодом других и ограничивает радиус взрыва, если агент выходит из-под контроля.

3. Запрашивайте атрибуцию на каждом уровне

Каждый запрос передает идентификатор агента от пограничного прокси-сервера через уровень приложения в базу данных. журнал запросов. Когда что-то идет не так, вы прослеживаете полный путь от агента к действию.

Аудит токена агента с помощью Botoi SDK

Объедините конечные точки JWT и пароля в одну функцию аудита. Расшифруйте токен, проверьте срок его действия, проверьте подпись и отметьте слишком широкие области действия.

import Botoi from "@botoi/sdk";

const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });

async function auditAgentToken(token: string, secret: string) {
  // Step 1: Decode to inspect claims
  const decoded = await botoi.jwt.decode({ token });
  const claims = decoded.data.payload;

  console.log("Agent:", claims.sub);
  console.log("Scopes:", claims.scopes);

  // Step 2: Check expiration
  const now = Math.floor(Date.now() / 1000);
  const hoursLeft = (claims.exp - now) / 3600;

  if (hoursLeft < 0) {
    console.error("Token expired", Math.abs(hoursLeft).toFixed(1), "hours ago");
    return { valid: false, reason: "expired" };
  }

  if (hoursLeft > 24) {
    console.warn("Token lives longer than 24 hours; rotate sooner");
  }

  // Step 3: Verify signature
  const verified = await botoi.jwt.verify({ token, secret, algorithms: ["HS256"] });

  if (!verified.data.valid) {
    console.error("Signature verification failed");
    return { valid: false, reason: "invalid_signature" };
  }

  // Step 4: Check scope breadth
  const dangerousScopes = claims.scopes.filter(
    (s: string) => s === "*" || s === "admin" || s.endsWith(":*")
  );

  if (dangerousScopes.length > 0) {
    console.warn("Overly broad scopes:", dangerousScopes);
  }

  return { valid: true, agent: claims.sub, scopes: claims.scopes, hoursLeft };
}

const result = await auditAgentToken(process.env.AGENT_TOKEN!, process.env.SIGNING_SECRET!);
console.log(result);

Запустите эту проверку как шаг перед развертыванием. Если срок действия токена истек, срок жизни токена превышает 24 часа, подпись не удалась. проверки или содержит области с подстановочными знаками, заблокируйте развертывание.

Контрольный список для аутентификации API агента AI

Проверять Что проверить Конечная точка Ботой
Уникальная личность каждого агента Никакие два агента не имеют общего ключа или токена. sub требовать /v1/jwt/decode
Минимальные объемы Области действия токена соответствуют цели агента; нет подстановочных знаков /v1/jwt/decode
Срок действия токена TTL менее 24 часов; механизм обновления на месте /v1/jwt/decode
Запросить подписание Полезная нагрузка соответствует HMAC на стороне сервера /v1/hash/hmac
Секретная ротация Секреты меняются при развертывании или по расписанию. /v1/password/generate
Запросить регистрацию Каждый запрос агента регистрируется с использованием идентификатора и хеша полезной нагрузки. /v1/hash

Данные опроса однозначны: команды развертывают агенты ИИ быстрее, чем обеспечивают их безопасность. У 80,9% агенты работают, но менее 1 из 5 присваивают этим агентам свою индивидуальность. Каждая ошибка в этом списке, общие ключи, широкие возможности, постоянные учетные данные, тихий трафик, аутентификация в форме человека, это бэкдор, ожидающий следующего сбитого с толку депутата инцидент.

Выберите одну ошибку из этого списка. Исправьте это на этой неделе. Затем переходите к следующему.

FAQ

Должны ли агенты ИИ использовать те же ключи API, что и пользователи-люди?
Нет. Агентам ИИ требуются специальные учетные данные с ограниченными разрешениями, ограничениями скорости для каждого удостоверения и автоматическим сроком действия. Опрос, проведенный в 2026 году среди более чем 900 практиков, показал, что только 21,9% команд рассматривают агентов как независимые сущности, несущие идентификационные данные, а 44% по-прежнему используют статические ключи API для разных агентов.
Как ротировать ключи API для агентов ИИ без простоев?
Создайте новые учетные данные, разверните их на агенте, убедитесь, что они работают, а затем отзовите старый ключ. Используйте токены с коротким сроком действия (1–24 часа) с автоматическим обновлением, чтобы ротация происходила без ручных действий. Конечная точка Botoi /v1/password/generate создает секреты с высокой энтропией, а /v1/jwt/decode проверяет новый токен перед его обрезанием.
Что входит в десятку лучших агентских приложений OWASP?
В рейтинге OWASP Top 10 агентских приложений, выпущенном в 2026 году, перечислены наиболее распространенные риски безопасности, когда агенты ИИ взаимодействуют с API и инструментами. Неправомерное использование инструментов и повышение привилегий возглавляют список с 520 зарегистрированными инцидентами. Другие риски включают недостаточный контроль доступа, отсутствие контрольных журналов и запутанные атаки депутатов.
Как вы отслеживаете межмашинный трафик API от агентов ИИ?
Регистрируйте каждый запрос с указанием идентификатора агента, отметки времени, конечной точки и хеша полезной нагрузки. Используйте структурированные журналы JSON и отправляйте их в централизованную систему (Datadog, Grafana или CloudWatch). Исследование 2026 года показало, что 48,9% организаций вообще не могут отслеживать трафик агентов ИИ, что делает их слепыми к скомпрометированным или плохо ведущим себя агентам.
Что такое растерянная депутатская атака в контексте агентов ИИ?
Атака сбитого с толку заместителя происходит, когда агент ИИ использует свои законные учетные данные для выполнения действий, которые его оператор не планировал. Агент проходит каждую проверку личности, поскольку у него есть действительные токены, но он действует по инструкциям из ненадежного источника. Meta задокументировала эту закономерность в инциденте с мошенническим агентом, когда агент получил доступ к ресурсам, выходящим за рамки его предполагаемой области действия.

Начните разработку с botoi

150+ API-эндпоинтов для поиска, обработки текста, генерации изображений и утилит для разработчиков. Бесплатный тариф, без банковской карты.