AUTH

Аутентификация

Формат API-ключа, заголовок Authorization, ротация ключей и лучшие практики безопасности при работе с Codex Key.

Формат ключа

Все ключи Codex Key имеют префикс sk-clb- и длину 43 символа после префикса:

sk-clb-AbCdEfGhIjKlMnOpQrStUvWxYz0123456789

Ключи зашифрованы при хранении (AES-GCM) и видны полностью только один раз — в момент создания. В личном кабинете сохраняется только последние 4 символа и метаданные (имя, дата создания, последнее использование).

HTTP-заголовок

Передавайте ключ в заголовке Authorization по схеме Bearer:

Authorization: Bearer sk-clb-...

Пример с curl:

curl https://codexkey.ru/v1/models \
  -H "Authorization: Bearer sk-clb-..."

Пример с Python и SDK OpenAI:

from openai import OpenAI

client = OpenAI(
    api_key="sk-clb-...",
    base_url="https://codexkey.ru/v1",
)

resp = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "Привет"}],
)
print(resp.choices[0].message.content)

Ротация ключей

Рекомендуемая частота — не реже раза в 90 дней. Алгоритм безопасной ротации:

  1. Создайте новый ключ в кабинете (имя: prod-v2).
  2. Разверните его в продакшн (через переменную окружения, секрет в CI/CD, vault).
  3. Убедитесь, что новый ключ работает (проверьте по логам в /cabinet/logs).
  4. Удалите старый ключ кнопкой Отозвать в кабинете.

При компрометации удаляйте ключ немедленно — отзыв применяется в течение нескольких секунд.

Хранение секретов

  • Никогда не коммитьте ключ в репозиторий. Используйте .env + .gitignore или secret manager (Vault, AWS Secrets Manager, GitHub Secrets).
  • На фронтенде ключ держать запрещено — он попадёт в bundle и будет виден любому пользователю. Делайте запросы через свой backend.
  • Для CLI-инструментов используйте keychain (macOS), secret-tool (Linux) или зашифрованный конфиг.

Скоупы (planned)

В текущей версии каждый ключ имеет полные права на свой аккаунт. В дорожной карте — раздельные скоупы:

  • chat:write — доступ к /v1/chat/completions.
  • responses:write — доступ к /v1/responses.
  • models:read — доступ к /v1/models.
  • billing:read — чтение лимитов и баланса.

Аудит и мониторинг

Все запросы логируются в /cabinet/logs с указанием:

  • timestamp,
  • модели,
  • количества токенов (prompt / completion / reasoning),
  • стоимости в рублях,
  • HTTP-кода ответа,
  • ID ключа (последние 4 символа).

Аномальные всплески (например, +500% запросов за час) автоматически отправляют уведомление на email владельца аккаунта.

Коды ошибок аутентификации

КодПричина
401Ключ отсутствует, неверный, отозван или с неверным префиксом.
402Ключ валиден, но баланс аккаунта равен нулю.
403Ключ валиден, но действие запрещено (например, заблокирован).
429Превышен rate limit (RPM/TPM) — повторите запрос с backoff.

Подробности — в API-справочнике.