Перейти к содержимому

Глоссарий

Ключ API

Ключ сделан для машин. Сам по себе он не истекает, несёт только отмеченные при выпуске права, а утёкший закрывается одной строкой вместо смены пароля у всей команды.

Ключ API это длинная случайная строка, которую программа шлёт вместо пароля, чтобы работать от лица аккаунта.

Зачем программе свой ключ

Пароль принадлежит человеку. С ним идут второй шаг входа, сессия с концом и устройство, которое надо иметь под рукой.

У сценария нет ничего из этого. Он идёт в три часа ночи на машине, куда никто не смотрит, и вопрос про код останавливает его насмерть.

  • Живёт до вашего отзыва

    Ни ежедневного входа, ни набора руками. Ключ и есть весь пропуск целиком.

  • Прав у него меньше

    Человек делает всё, что позволяет его роль. Ключ делает только то, что ему отметили.

  • Носит своё имя

    Отдельный ключ на подрядчика или на сценарий это одна строка, закрываемая по окончании работы.

Права ключа

Права выбираются при выпуске и потом не расширяются. Ключ на чтение профилей не тронет прокси и не отметит браузер запущенным.

ПравоЧто открывает
profiles:readСписок профилей.
profiles:writeСоздание, правка и удаление профиля.
browser:runОтметку профиля открытым и закрытым, без права его править.
proxies:readСписок сохранённых прокси, без паролей.
proxies:writeСоздание, правку и удаление прокси.
flows:readСписок сохранённых сценариев.
logs:readЖурнал действий, журнал открытий и адреса входов.

Список один и каждое право в нём что-то стережёт

Право, которое можно выдать, но которое не охраняет ни одного хода, хуже отсутствующего: выдавший уверен, что дверь открыта, а сценарию отвечают отказом.

Что говорит отказ вашему сценарию

На три разные беды приходят три разных ответа, и умение их различать это разница между починкой и часом догадок.

  • Ключ неизвестен

    Отозванный ключ, набранный с ошибкой и никогда нам не принадлежавший читаются одинаково, и про аккаунт не подтверждается ничего.

    401
  • Тариф закончился

    Ключ настоящий и права при нём целы. Не хватает только оплаты, и ответ говорит об этом прямо, а не намёком.

    402
  • Право не отмечено

    Ключ годен, а ходу нужно право, которого у него нет. Выпустите новый ключ, а не ищите другой адрес.

    403

Когда ключ перестаёт быть нужным

Ключ показывается один раз, в миг выпуска. Дальше хранится только его отпечаток и первые знаки, поэтому потерянный ключ заменяют, а не восстанавливают.

Отзыв действует со следующего вызова, а запись о ключе нарочно остаётся. Без неё в журнале стояли бы действия ключа, о котором уже никто ничего не скажет.

Закрытый доступ закрывает и ключи

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

Часто путают с этим

  • Пропуск на своей машине

    У интерфейса автоматизации на вашем компьютере один пропуск на всё, без прав и без срока. Он открывает окна браузера, чего серверный ключ не делает никогда.

  • Пропуск сессии

    Человек входит и получает недолгий пропуск со всеми правами своей роли. Ключ уже по правам и живёт до отзыва.

  • Разовый код

    Второй шаг входа доказывает, что человек за клавиатурой. Ключ существует ровно затем, чтобы там никого не было.

Чего это не делает

  • Серверный ключ не открывает окон браузера. Запуск профиля из кода это дело интерфейса на вашем компьютере, а ключ лишь отмечает профиль занятым и пишет журнал.
  • Ключом нельзя выпустить второй ключ или завести подписку на события. И то и другое требует входа паролем, поэтому утёкший ключ на чтение не расширит сам себя.
  • Ход, у которого не объявлено право, ключу закрыт вовсе. Корзину и предпросмотр отпечатка читает человек, а не сценарий.
  • Ключ это не отдельный участник команды. Он видит ровно то же, что и его хозяин, поэтому ограничение по папкам у этого человека действует и на ключ.

Проверить

Каждое утверждение выше указывает на файл, который можно открыть, и на стенд, который идёт.

Ключ хранится отпечатком и отдаётся один раз
apps/server/src/api-keys/api-keys.service.ts · apps/server/test/api-keys.js
Каждое право из списка стережёт настоящий ход, а ключи входят в платные тарифы
apps/server/src/api-keys/scopes.ts · apps/server/test/права-ключей-живые.js · apps/server/test/ключи-платные.js
Неизвестный ключ, кончившийся тариф и нехватка права это три разных ответа
apps/server/src/auth/api-key.guard.ts
Кабинет показывает секрет один раз и больше никогда
apps/web/test/api-keys-web.js

Вопросы

Сколько ключей можно держать сразу?
Двадцать живых, и отозванные в этот счёт не идут. Предел стоит потому, что забытый ключ это дверь, про которую никто не помнит.
Что будет, когда кончится подписка?
Ключ перестанет работать, и в ответе причиной названа оплата. Тариф за ключом спрашивается по ходу работы, а не только в день выпуска.
Можно ли запереть ключ на один профиль?
Нет. Права выбираются по виду предмета, а не по самому предмету, поэтому самый узкий ключ это ключ, который только читает.
Хранится ли сам ключ у вас?
Нет. Хранится отпечаток для сверки и первые знаки, чтобы вы отличали свои ключи друг от друга. Их и показывает список.
Как увидеть, что делал ключ?
Журнал действий записывает ключ у каждой записи. Именно это и позволяет отозвать ключ одного подрядчика, не останавливая остальную автоматизацию.

Посмотрите права до выпуска ключа

Кабинет перечисляет все права ключа и называет, что открывает каждое, поэтому узкий ключ выпустить не сложнее широкого.