3. AI服务接口身份认证机制
AI 服务接口的身份认证不是“加一个密钥”这么简单。一次推理请求往往同时携带调用方身份、租户归属、模型访问权限、配额策略和审计标签,这些信息必须在网关、模型服务、向量库、工具调用链之间无损传递,并且不能被伪造或越权放大。本节把 API Key、OAuth 2.0、JWT、mTLS 和模型令牌放在同一条信任链上讨论,重点说明它们各自解决什么问题、在什么位置使用,以及多租户隔离如何落地。
一、五种机制的分工与信任边界
API Key 是最轻量的凭证,适合服务端到服务端的固定调用或内部工具。它本质是一个长期有效的共享秘密,优点是接入快,缺点是难以表达细粒度权限、难以轮换、一旦泄露影响面大。工程上应把 API Key 绑定到具体租户和配额策略,并支持按前缀检索、按哈希存储、按状态吊销。
OAuth 2.0 解决的是“代表用户或第三方应用访问资源”的授权问题。在 AI 平台中,常见模式是客户端凭证模式(client_credentials)用于服务间调用,授权码模式用于控制台或第三方集成。OAuth 2.0 本身不传递用户身份细节,它颁发的是访问令牌,通常再配合 JWT 承载声明。
JWT 是令牌的载体格式,不是认证协议。它把签发者、主体、受众、过期时间、租户、角色、模型白名单等声明编码为可验证的令牌。关键点在于:JWT 必须验签,必须校验 iss、aud、exp、nbf,并且不能把 alg 交给客户端决定,否则会出现“算法混淆”攻击。
mTLS 解决的是传输层双向身份认证。它让客户端和服务端在 TLS 握手阶段就互相验证证书,适合高安全等级的内部服务网格、模型推理集群和跨机房调用。mTLS 不替代应用层授权,但能显著降低中间人攻击和凭证重放风险。
模型令牌是 AI 场景特有的短期凭证,通常由平台在用户通过认证后签发,作用范围限定到某个模型、某个租户、某个会话或某次任务。它把“谁能调用哪个模型、调用多少次、是否允许流式输出、是否允许工具调用”编码进令牌声明,并由模型网关强制执行。
二、JWT 与模型令牌的声明设计
一个可用的 AI 服务 JWT 通常包含以下声明:iss 为签发服务,sub 为用户或应用 ID,aud 为模型网关地址,exp 建议 5~15 分钟,tenant_id 标识租户,scope 描述权限范围,model_allow 列出允许调用的模型,quota_key 指向配额桶。模型令牌在此基础上进一步收窄,例如只允许 chat-completions、只允许 gpt-4o-mini、只允许 1000 tokens、只允许单次会话。
下面是一个模型令牌声明的示例,仅用于说明字段结构,不是真实签发结果:
{
"iss": "https://auth.example.ai",
"sub": "tenant-42:app-7",
"aud": "https://gateway.example.ai/v1",
"exp": 1735689600,
"iat": 1735688700,
"tenant_id": "tenant-42",
"scope": ["inference:chat", "embedding:read"],
"model_allow": ["gpt-4o-mini", "text-embedding-3-small"],
"quota_key": "tenant-42:chat:2025-01",
"session_id": "sess-9f3a",
"max_tokens": 1000,
"stream": true
}
网关收到请求后,先验签,再逐项校验:aud 是否等于自身,exp 是否未过期,tenant_id 是否与请求头中的租户一致,model_allow 是否包含目标模型,quota_key 是否还有余量。任何一项不通过都应返回 401 或 403,并记录拒绝原因,而不是继续转发。
三、多租户隔离的工程实现
多租户隔离的核心原则是:身份信息必须从令牌中解析,不能信任客户端自报的租户字段。具体落地时,网关在鉴权通过后把 tenant_id 注入到内部请求上下文,下游服务只读取该上下文,不再解析外部请求头。向量库使用租户前缀作为命名空间,例如 tenant-42:docs;缓存键统一加租户前缀;日志和指标按租户打标,便于计费和排障。
配额方面,建议按租户、按模型、按时间窗口三个维度建桶。例如租户 42 的 gpt-4o-mini 每分钟 600 次请求、每月 500 万 tokens,超出后返回 429 并携带 Retry-After。限流键应使用 tenant_id + model + window,避免不同租户互相影响。
常见错误:把 tenant_id 放在请求体或 URL 参数中由客户端传入,网关只做格式校验而不与令牌比对。攻击者只需修改该字段即可读取其他租户数据。正确做法是令牌中的 tenant_id 为唯一可信来源,请求中的租户字段仅用于一致性校验,不一致直接拒绝。
四、组合使用与轮换策略
实际系统通常组合使用多种机制:外部调用方使用 API Key 或 OAuth 2.0 获取访问令牌,内部服务间使用 mTLS 加 JWT,模型网关向推理服务签发短期模型令牌。API Key 应支持定期轮换和双密钥并行,JWT 签名密钥通过 JWKS 端点发布并支持 kid 轮换,mTLS 证书设置合理的有效期和吊销列表。
验证时,可以构造三类用例:合法令牌应返回 200;篡改 tenant_id 的令牌应返回 401;超出配额的请求应返回 429。观察网关日志中是否记录了 request_id、tenant_id、model 和拒绝原因,即可判断认证链是否按预期工作。
工程建议:把认证与授权决策集中到网关,下游服务只信任内部上下文;令牌有效期尽量短,配合刷新机制;所有拒绝路径都要有明确的状态码和审计日志,避免“静默失败”导致问题难以定位。