Как ограничить API-ключ одним проектом
Создайте отдельный ключ для серверной сверки инвойсов одного проекта: выберите проект, чтение и нужный раздел API, настройте IP и срок действия, затем проверьте границу доступа.
Обновлено:
API-ключ можно привязать к одному проекту Cryptanio. Разберём процесс сверки заказов, который должен читать инвойсы интернет-магазина, но не получать данные остальных проектов аккаунта. Для него нужен отдельный ключ: связь с проектом определяет область данных, а права и разделы API — допустимые операции.
Ни название ключа, ни номер проекта в вашем приложении сами по себе не ограничивают доступ. Ограничение нужно сохранить в политике ключа. Доступ действует для публичного API v1; ключ не является паролем для входа в кабинет.
1. Подготовьте проект и права
Нужны права владельца или администратора аккаунта и существующий активный проект с услугой «Платежи». Сначала убедитесь, что его название и назначение вам понятны: выбор неправильного проекта может дать корректный ключ с неподходящей областью доступа.
Откройте «API-ключи». В форме «Создание API-ключа» задайте «Название», например «Сверка магазина». Отдельное имя помогает отличать серверные процессы, но фактическую защиту задают следующие поля.
2. Выберите режим и конкретный проект
Для чтения реальных инвойсов выберите «Рабочий режим» в поле «Режим». Ключ должен соответствовать режиму данных, которые запрашивает ваш сервер.
В поле «Проект» выберите нужный проект вместо «Все проекты». Кабинет показывает подсказку об ограничении услугой выбранного проекта. Привязка к проекту и доступ к услуге применяются вместе: ключ не включает услугу и не расширяет её возможности сам по себе.
3. Оставьте только чтение инвойсов
В поле «Доступ» выберите «Только чтение». В «Разделы API» оставьте «Инвойсы» и снимите остальные отметки, если процессу они не нужны. Для обычной сверки состояния счёта не требуется управление адресами, вебхуками или симуляцией.
Если другой сервер должен создавать инвойсы, ему потребуется «Чтение и запись» и соответствующий раздел. Выделите ему отдельный ключ с понятным назначением, не расширяя права процесса сверки без необходимости. Доступ на запись действует внутри выбранных разделов, а не открывает весь API.
4. Настройте IP и срок действия
В «Разрешённые IP-адреса» укажите исходящие публичные IP вашего сервера либо необходимые диапазоны CIDR, по одному в строке. Нужен адрес, с которого запрос приходит к API, а не IP покупателя. При использовании хостинга или прокси уточните фактический выходной адрес.
Пустое поле разрешает любой IP. Если сервер использует несколько выходных адресов, учитывайте их при настройке; иначе правильный ключ может не пройти проверку. IP-ограничение дополняет выбор проекта и разделов, а не заменяет их.
При необходимости задайте «Срок действия». Выбранная дата действует до конца дня по UTC. Согласуйте её со сроком работы интеграции: истёкший ключ не является признаком того, что клиент не заплатил.
5. Создайте ключ и сохраните секрет
Нажмите «Создать ключ» и выполните подтверждение защиты, если кабинет его запросит. Скопируйте секрет из показанного окна и сохраните на сервере процесса сверки. Не помещайте его в клиентский JavaScript, платёжную ссылку, переписку с покупателем или публичный журнал.
После закрытия окна не рассчитывайте восстановить секрет из списка: там показано сокращённое обозначение ключа. Проверьте «Область доступа», проект, доступные разделы, срок и статус. Если нужен доступ разработчику, передавайте его через подходящее защищённое хранилище, а не публикуйте ключ вместе с инструкцией.
6. Проверьте разрешённый и запрещённый доступ
С сервера с разрешённым IP прочитайте известный инвойс этого проекта. Ниже — пример чтения из каталога API; используйте собственный ID инвойса и созданный ключ:
#!/usr/bin/env bash
set -euo pipefail
: "${CRYPTANIO_RESOURCE_ID:?Set CRYPTANIO_RESOURCE_ID}"
: "${CRYPTANIO_API_KEY:?Set CRYPTANIO_API_KEY}"
urlencode() {
local LC_ALL=C text="$1" char index
for ((index=0; index<${#text}; index++)); do
char="${text:index:1}"
case "$char" in [a-zA-Z0-9.~_-]) printf '%s' "$char" ;; *) printf '%%%02X' "'$char" ;; esac
done
}
response_file="$(mktemp)"
trap 'rm -f "$response_file"' EXIT
transfer_status=0
http_status="$(curl \
--silent --show-error --max-time 30 --request GET \
--header "Authorization: Bearer $CRYPTANIO_API_KEY" \
--header 'Accept: application/json' \
"https://api.cryptanio.com/v1/invoices/$(urlencode "$CRYPTANIO_RESOURCE_ID")" \
--output "$response_file" --write-out '%{http_code}')" || transfer_status=$?
if [[ "$http_status" == 2?? ]]; then
cat "$response_file"
exit "$transfer_status"
fi
printf 'HTTP %s\n' "$http_status" >&2
cat "$response_file" >&2
exit 1
Затем проверьте границу на известном инвойсе другого вашего проекта: его данные не должны возвращаться. Списки также должны оставаться в выбранном проекте. Для этого ключа создание и изменение инвойсов запрещены, даже если раздел «Инвойсы» включён. Организация дальнейшей сверки описана в руководстве по проверке оплаты через API.
Если запрос не проходит, проверьте проект, режим, IP, срок и разрешения. Не делайте вывод о неоплате по одной ошибке доступа и не подставляйте вместо ограниченного ключа общий ключ аккаунта. Платёж оценивается по состоянию инвойса.
Как уточнить доступ позже
У существующего ключа нажмите «Доступ», измените проект, разделы, IP или срок и выберите «Сохранить доступ». Режим выбирается при создании ключа. «Заменить ключ» меняет секрет и сразу отключает прежний; «Отозвать» прекращает его использование. Перед заменой подготовьте обновление серверных клиентов, чтобы сверка заказов не остановилась.