Безопасность и секреты
Эти правила обязательны и не обсуждаются. Их нарушение может привести к краже партнёрского токена и финансовым потерям.
Главные правила#
- Секреты никогда не попадают в git. Ни в код, ни в README, ни в примеры,
ни в JSON-шаблоны, ни в комментарии. В репозитории допустим только файл
.env.exampleс пустыми значениями. - На продакшене JWT живёт в
data/oneclick.jwt(том Docker./data) и/или в переменной окруженияONECLICK_JWT. Приоритет: непустой файл, затем env. Файл задаётся через страницу «Установка Partner JWT» (гейт по паролюINSTALL_GATE_PASSWORD) и подхватывается прокси без перезапуска. .env/.env.local— только локальная разработка (файлы в.gitignore). На VPS основной путь — страница установки, а не правка env вручную.- Браузер никогда не видит токен. Все запросы к 1Click идут через
серверный прокси (
/api/proxy/1click/...). Прокси сам читает JWT (файл, затем env) и добавляет заголовокX-API-Key. В клиентском коде, в шаблонах и в сохранённых запросах токена нет и быть не может. - В шаблонах — только плейсхолдеры:
YOUR_JWT,YOUR_NEAR_ACCOUNT.near,DEPOSIT_ADDRESS_FROM_QUOTE. Реальные значения не сохраняются. - Логи без секретов. Прокси не пишет в логи ни заголовки, ни тела
запросов; строки, похожие на JWT, автоматически заменяются на
[REDACTED_JWT].
Если токен утёк или нужна ротация#
Отдельной кнопки «Rotate» в дашборде нет: создайте новый ключ, затем отзовите старый.
- В Partner Dashboard запросите новый Distribution Channel JWT и скопируйте его.
- Сразу сохраните новый токен на странице установки
(или обновите
ONECLICK_JWTв локальном.env.localи перезапустите dev-сервер). - В дашборде отзовите старый ключ (корзина → точное имя label → Delete). Старый JWT перестаёт работать сразу.
- Если токен попал в git — перевыпуска недостаточно, историю коммитов тоже нужно вычистить (обратитесь к разработчику).
Почему это важно#
Партнёрский JWT снимает платформенную комиссию 0.2% и привязан к вашему аккаунту дистрибьютора. Злоумышленник с вашим токеном может выполнять запросы от вашего имени. Кроме того, у 1Click нет тестовой сети — любые реальные свопы происходят с настоящими деньгами, поэтому проверяйте сценарии на маленьких суммах.
Проверка перед каждым коммитом#
git diff— просмотрите изменения глазами: нет ли строк, похожих на токены (eyJ...), приватных ключей, seed-фраз, реальных адресов с балансом.- Убедитесь, что
.env,.env.localиdata/*.jwt/data/*.api-keyне отображаются вgit status.
Relay.link, LI.FI и SwapKit (API keys)#
Единая страница установки: /api-keys-install
(тот же INSTALL_GATE_PASSWORD).
| Провайдер | Файл | Env | Заголовок прокси |
|---|---|---|---|
| 1Click | data/oneclick.jwt | ONECLICK_JWT | X-API-Key |
| Relay | data/relay.api-key | RELAY_API_KEY | x-api-key |
| LI.FI | data/lifi.api-key | LIFI_API_KEY | x-lifi-api-key |
| SwapKit | data/swapkit.api-key | SWAPKIT_API_KEY | x-api-key |
-
Приоритет: непустой файл → env. Права файла 0o600.
-
UI после сохранения показывает только намёк «…последние 6», не полное значение.
-
Браузер ключи не видит; клиентские auth-заголовки отбрасываются.
-
Relay: с
referrerв quote ключ обязателен (401 UNAUTHORIZED_QUOTE). -
LI.FI: ключ опционален, повышает лимиты (portal.li.fi).
-
SwapKit: ключ рекомендуется для
POST /v3/quote(без ключа часто 403 Cloudflare). Каталог/providersи/tokensобычно доступны анонимно. Affiliate tiers — в Partner Dashboard (доки).