跳转到内容
Guide

AI 代理正在调用您的 API:创建后门的 5 个身份验证错误

| 9 min read

80% 的团队在生产中运行 AI 代理,但只有 22% 将其视为独立身份。 五个身份验证错误会将您的 API 变成敞开的大门。

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

2026 年对 900 多名从业者的调查发现,80.9% 的工程团队在测试或生产中运行 AI 代理。 同一项调查发现,只有 21.9% 的人将这些代理视为独立的身份承载实体。 其余的分享 凭证、跳过审核跟踪,并授予对无人监督运行的代码的全面 API 访问权限。

这种差距是一个安全问题。 OWASP 发布了 2026 年代理应用程序前 10 名,以及工具滥用和 特权升级以 520 起报告事件位居榜首。 Meta 记录了一个流氓 AI 代理,它通过了所有测试 身份检查,因为它持有来自混乱的代理场景的有效凭据。 48.9% 的组织不能 甚至可以查看他们的代理正在使用 API 访问做什么。

这篇文章涵盖了五个身份验证错误,这些错误将您的 API 变成为 AI 代理敞开的大门,以及如何关闭每个错误 一个带有工作代码的。

错误 1:在所有代理之间共享单个 API 密钥

44% 的团队对 AI 代理使用静态 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"
    }
  }
}

困惑的副问题: Meta流氓特工事件的发生是因为特工持有 授予超出其预期范围的访问权限的有效凭据。 该特工通过了所有身份检查。 的 凭证是合法的。 问题是没有人将它们确定为特工的目的。

错误 2:当代理需要一个端点时授予完整的 API 访问权限

35% 的组织依赖 AI 代理的共享服务帐户。 具有完整 API 访问权限的服务帐户 意味着您的工单汇总代理还可以处理退款、导出客户 PII 和删除记录。 这是最小特权违反原则。

将每个代理令牌的范围限制为它所需的最小端点和操作。 退款处理代理获得 refunds:writeorders: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代币兑换 继承+缩小 每会话 全链条 最低

适用于 AI 代理的新 IAM 解决方案支持代表 (OBO) 令牌交换。 代理收到令牌 从原始用户的会话派生,自动将范围限定为用户授予的权限。 这个 方法创建了从用户到代理再到 API 的完整授权链。

错误3:代理凭证没有过期

43% 的团队对 AI 代理使用用户名/密码身份验证。 这些凭证不会过期。 静态API 密钥也不会过期,除非您在系统中内置了过期功能。 永久有效的代理凭证 是一种可能被窃取、在日志中泄露或提交到存储库并在几个月后被利用的凭证。

将代理令牌的最大 TTL 设置为 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. 在每一层请求归属

每个请求都携带代理身份,从边缘代理通过应用层到达数据库 查询日志。 当出现问题时,您可以追踪从代理到行动的完整路径。

Audit an agent token with the 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);

运行此检查作为预部署步骤。 如果令牌已过期、TTL 超过 24 小时,则签名失败 验证,或携带通配符范围,阻止部署。

AI 代理 API 身份验证清单

查看 要验证什么 Botoi端点
每个代理的唯一身份 没有两个代理共享密钥或令牌 sub 宣称 /v1/jwt/decode
最小范围 令牌范围与代理的目的相匹配; 没有通配符 /v1/jwt/decode
令牌过期 TTL低于24小时; 刷新机制到位 /v1/jwt/decode
请求签名 负载 HMAC 在服务器端匹配 /v1/hash/hmac
秘密轮换 秘密在部署时或按计划轮换 /v1/password/generate
请求记录 每个代理请求都会记录身份和有效负载哈希 /v1/hash

调查数据很明确:团队部署人工智能代理的速度比保护人工智能代理的速度快。 80.9% 有代理在运行,但是 不到五分之一的人向这些特工提供自己的身份。 这个列表中的每一个错误,共享密钥,广泛的范围, 永久凭证、静默流量、人形身份验证,是等待下一个困惑的副手的后门 事件。

从这个列表中选出一个错误。 这周修复一下吧 然后移动到下一个。

FAQ

人工智能代理是否应该使用与人类用户相同的 API 密钥?
不可以。人工智能代理需要具有范围权限、每个身份速率限制和自动过期的专用凭据。 2026 年对 900 多名从业者进行的一项调查发现,只有 21.9% 的团队将代理视为独立的身份承载实体,44% 的团队仍然在代理之间共享静态 API 密钥。
如何在不停机的情况下轮换 AI 代理的 API 密钥?
生成新凭证,将其部署到代理,验证其是否有效,然后撤销旧密钥。 使用具有自动刷新功能的短期令牌(1-24 小时),因此无需手动步骤即可进行轮换。 Botoi /v1/password/generate 端点创建高熵机密,而 /v1/jwt/decode 在切换之前检查新令牌。
OWASP 代理应用程序前 10 名是什么?
OWASP Top 10 for Agentic applications 于 2026 年发布,列出了 AI 代理与 API 和工具交互时最常见的安全风险。 工具滥用和权限升级位居榜首,共报告了 520 起事件。 其他风险包括访问控制不足、审计跟踪缺失以及代理攻击混乱。
如何监控来自 AI 代理的机器到机器 API 流量?
使用代理身份、时间戳、端点和有效负载哈希记录每个请求。 使用结构化 JSON 日志并将其发送到集中式系统(Datadog、Grafana 或 CloudWatch)。 2026 年的一项研究发现,48.9% 的组织根本无法监控 AI 代理流量,导致他们对受损或行为不当的代理视而不见。
在人工智能代理的背景下,什么是混乱的代理攻击?
当人工智能代理使用其合法凭证执行其操作员无意的操作时,就会发生混淆代理攻击。 代理通过了每项身份检查,因为它持有有效的令牌,但它根据来自不受信任来源的指令进行操作。 Meta 在一次恶意代理事件中记录了这种模式,其中代理访问了超出其预期范围的资源。

开始使用 botoi 构建

150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。