Глава 7: Безопасность и Аутентификация

7.1 Обзор

Механизмы безопасности — важная часть протокола, обеспечивающая контроль провайдерами навыков над тем, кто может обнаруживать и вызывать их навыки.

7.2 Трёхуровневый Контроль Доступа

УровеньВидимость обнаруженияРазрешение вызоваПрименение
publicВидимо всемБез аутентификацииОткрытые API
restrictedВидимо всемТребуется аутентификацияКоммерческие API
privateВидимо только после аутентификацииТребуется аутентификацияВнутренние инструменты

7.3 Методы Аутентификации

API Key

{ "type": "api_key", "description": "Передать API Key через HTTP Header", "header": "X-API-Key" }

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": "Чтение информации", "skill:admin": "Управление конфигурацией" }
  }
}

Пользовательская Аутентификация

{
  "type": "custom",
  "custom": {
    "instructions": "Подписать тело запроса HMAC-SHA256 и поместить подпись в header X-Signature",
    "parameters": [{ "name": "secret_key", "type": "string", "description": "Секретный ключ для HMAC-подписи", "required": true }]
  }
}

Без Аутентификации

{ "type": "none" }

7.4 Обработка Ошибок Аутентификации

Ошибка Аутентификации (401)

{ "error": { "code": "AUTH_REQUIRED", "message": "Authentication is required to invoke this skill", "details": { "required_auth_type": "oauth2", "authorization_url": "https://example.com/oauth/authorize" } } }

Недостаточные Права (403)

{ "error": { "code": "PERMISSION_DENIED", "message": "Insufficient permissions to invoke this skill", "details": { "required_scopes": ["skill:invoke"], "current_scopes": ["skill:read"] } } }

7.5 Лучшие Практики Безопасности

  1. Вся коммуникация должна использовать HTTPS
  2. API Keys передавать через Headers, избегая URL
  3. OAuth 2.0 Tokens должны иметь разумное время истечения
  4. Провайдеры должны реализовать ограничение скорости
  5. Чувствительные навыки должны использовать политику private