Что такое API-ключ — и почему его утечка бьёт по кошельку

Ты подключаешь к проекту нейросеть или сервис, и в инструкции написано: «вставь сюда свой API-ключ». Ты копируешь длинную строку вида sk-proj-a8f... и не задумываешься, что это. А штука вот в чём: этот ключ — не пароль от твоего аккаунта. Это пропуск, который говорит сервису «делай, что попросят, и счёт пришли мне». Утечёт — платить будешь ты.
Что такое API-ключ простыми словами
Когда твоя программа хочет поговорить с чужим сервисом через API, сервису надо понять, кто стучится. API-ключ — это и есть ответ на «кто ты». Длинная случайная строка, которую сервис выдал лично тебе. Ты прикладываешь её к каждому запросу, сервис узнаёт тебя и выполняет просьбу — генерирует картинку, отвечает текстом, шлёт письмо.
Сравни с пропуском в офис. На входе ты не называешь имя и фамилию — прикладываешь карточку. Турникет видит карточку и пускает. Карточка не знает, что ты — это ты; она знает только, что этой карточке можно войти. Точно так же ключ не знает, что за ним сидишь именно ты. Он знает, что предъявителю — можно.
Как он работает в запросе
Технически ключ обычно едет в заголовке запроса. Чаще всего так:
- заголовок
Authorization: Bearer sk-proj-a8f...— самый частый вариант; - иногда отдельный заголовок вроде
x-api-key: ...; - реже — параметром прямо в адресе (так делать не любят: адреса легко утекают в логи).
Сервис на той стороне берёт ключ и смотрит в свою базу: чей он, жив ли, не превышен ли лимит. Если всё ок — выполняет. Если ключ удалён или ты упёрся в потолок запросов — вернёт ошибку. То есть ключ работает сразу как удостоверение и как счётчик расхода: по нему сервис считает, сколько ты потратил.
Почему ключ — это про деньги, а не про личность
Вот неприятный момент, который новички узнают поздно. Если кто-то увидит твой ключ — он шлёт запросы от твоего имени, и сервис считает это законным. Для платных API (а у ИИ-сервисов почти всё платное по факту использования) это значит: чужой человек жжёт твой баланс. Бывают истории, когда забытый в открытом коде ключ за ночь накрутил счёт на сотни долларов.
Отсюда два правила, которые стоит выучить сразу:
- Ключ — не в коде и не в гите. Положишь его прямо в файл и зальёшь на GitHub — боты найдут за минуты, они сканируют публичные репозитории именно ради этого. Храни ключ в переменных окружения (файл
.env), а сам.envдобавь в.gitignore. Подробный разбор — в гайде как безопасно хранить ключи. - Ключ можно отозвать. Случайно засветил — не паникуй. Зайди в кабинет сервиса, удали старый ключ, создай новый. Старый сразу перестаёт работать. Это называется ротация, и делать её не страшно.
Где ты с ним столкнёшься
Почти везде, где подключаешь внешний сервис. Берёшь ИИ-модель через её API — получаешь ключ. Подключаешь карты, оплату, отправку писем, базу данных — почти у каждого свой ключ.
Полезная привычка: для разных проектов заводи разные ключи. Тогда если один утечёт, ты отзовёшь только его, не ломая остальные. И многие сервисы дают ограничивать ключ — например, разрешить только чтение или поставить месячный потолок трат. Поставь потолок сразу: это и есть страховка от той самой ночной истории на сотни долларов.
Вопрос: API-ключ — это то же самое, что пароль?
Нет. Пароль — про вход тебя как человека (часто плюс второй фактор). Ключ — про доступ программы к сервису от твоего имени, обычно без второго фактора. Поэтому к ключу относятся даже строже: украдут пароль — нужен ещё код из СМС; украдут ключ — больше ничего не нужно.
Вопрос: что делать, если ключ всё-таки утёк?
Сразу отозвать его в кабинете сервиса и создать новый — это минута. Потом проверь, не остался ли он в коде или в истории гита, и убери оттуда. Если ключ был платный, загляни в расход за последние часы: вдруг им уже успели воспользоваться.
Вопрос: почему ключ такой длинный и страшный?
Чтобы его нельзя было угадать. Будь он коротким — подобрали бы перебором. Длинная случайная строка — это как очень длинный пароль, который сгенерировали за тебя: угадать практически невозможно.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





