规范
7. 安全与认证
7.1 概述
本协议提供三级访问控制和四种认证类型,技能提供者 MUST 根据技能特性选择合适的安全策略。
7.2 访问控制策略
| 策略 | 未认证发现 | 认证后发现 | 调用要求 |
|---|---|---|---|
public | ✓ 可见 | ✓ 可见 | 无需认证 |
restricted | ✓ 可见 | ✓ 可见 | 必须认证 |
private | ✗ 不可见 | ✓ 可见 | 必须认证 |
关键规则
- 当未认证请求访问 Well-Known URI 时,返回的 Skill Index MUST NOT 包含任何
access === "private"的技能 - 当认证请求访问 Well-Known URI 时,返回的 Skill Index MUST 包含所有该认证身份有权访问的技能(包括
private) - 直接 URL 访问
private技能描述符时,未认证请求 MUST 收到 401 响应
7.3 认证类型
7.3.1 API Key 认证
描述符声明:
{
"type": "api_key",
"header": "X-API-Key"
}
调用时 MUST 通过指定的 HTTP Header 传递 API Key。
7.3.2 OAuth 2.0 认证
描述符声明:
{
"type": "oauth2",
"oauth2": {
"authorization_url": "https://example.com/oauth/authorize",
"token_url": "https://example.com/oauth/token",
"scopes": {
"skill:invoke": "调用技能",
"skill:read": "读取技能信息"
}
}
}
调用时 MUST 通过 Authorization: Bearer <token> Header 传递访问令牌。
7.3.3 自定义认证
描述符声明:
{
"type": "custom",
"custom": {
"instructions": "使用 HMAC-SHA256 对请求体签名,将签名放入 X-Signature header",
"parameters": [
{
"name": "secret_key",
"type": "string",
"description": "用于签名的密钥",
"required": true
}
]
}
}
7.3.4 无认证
{ "type": "none" }
仅适用于 access === "public" 的技能。
7.4 安全最佳实践
技能提供者 SHOULD 遵循以下实践:
- 生产环境 MUST 使用 HTTPS
- API Key MUST 通过 Header 传递,MUST NOT 出现在 URL 中
- OAuth 2.0 Token SHOULD 设置合理的过期时间
- SHOULD 实施速率限制(Rate Limiting)以防止滥用
- 敏感技能 SHOULD 使用
private访问策略 - SHOULD 在响应中包含
X-Request-Id用于审计追踪
