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 遵循以下实践:

  1. 生产环境 MUST 使用 HTTPS
  2. API Key MUST 通过 Header 传递,MUST NOT 出现在 URL 中
  3. OAuth 2.0 Token SHOULD 设置合理的过期时间
  4. SHOULD 实施速率限制(Rate Limiting)以防止滥用
  5. 敏感技能 SHOULD 使用 private 访问策略
  6. SHOULD 在响应中包含 X-Request-Id 用于审计追踪