Разрешенные домены

Принцип ограничения доступа на уровне доменов

В экосистеме Mapbox GL JS доступ к данным и стилям карты строится вокруг использования публичного или секретного access token, выдаваемого платформой Mapbox. Одним из ключевых механизмов защиты является ограничение использования токена по доменам (Allowed URLs / Allowed domains).

Эта система предотвращает несанкционированное использование токена на сторонних сайтах и позволяет привязать ключ API к конкретным веб-приложениям.


Модель работы ограничений

При каждом запросе Mapbox GL JS отправляет HTTP-запросы к API Mapbox, включая:

  • стили карты (styles)
  • тайлы (vector/raster tiles)
  • шрифты (glyphs)
  • спрайты (sprites)
  • геокодирование (если используется)

В запрос автоматически добавляется access token. Сервер Mapbox проверяет:

  • домен страницы (Origin / Referer)
  • список разрешённых доменов, заданных в настройках токена

Если домен отсутствует в списке разрешённых — запрос отклоняется.


Типы ограничений доменов

Ограничение по точному домену

Самый строгий вариант — привязка токена к конкретному домену:

  • example.com
  • app.example.com

В этом случае запросы с других поддоменов будут отклонены.


Поддомены и wildcard-поведение

Некоторые конфигурации допускают использование поддоменов:

  • *.example.com

Это позволяет использовать один токен для:

  • app.example.com
  • admin.example.com
  • map.example.com

Но не распространяется на:

  • example.org
  • evil-example.com

Ограничение по протоколу

Дополнительно учитывается протокол:

  • https://example.com
  • http://localhost:3000

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


Локальная разработка и localhost

При разработке часто используются адреса:

  • localhost
  • 127.0.0.1
  • 0.0.0.0

Для корректной работы Mapbox GL JS необходимо явно добавить эти адреса в список разрешённых доменов токена.

Типичные варианты:

  • http://localhost:3000
  • http://127.0.0.1:5173

Без этого браузерные запросы будут завершаться ошибкой авторизации.


Проверка домена на стороне браузера

Mapbox GL JS не ограничивает домены самостоятельно. Проверка происходит на уровне:

  • HTTP-заголовков (Referer, Origin)
  • серверной валидации access token

Таким образом, библиотека выступает только как транспортный слой, а контроль безопасности реализуется на стороне API Mapbox.


Ошибки, связанные с доменными ограничениями

Invalid token / Unauthorized

Возникает при:

  • использовании токена на неразрешённом домене
  • отсутствии домена в whitelist

Типичный ответ API:

  • 401 Unauthorized
  • Not Authorized - No Token

Referrer mismatch

Появляется, если:

  • домен запроса отличается от разрешённого
  • используется редирект на другой origin
  • приложение работает через iframe с другим доменом

CORS-блокировки

Хотя Mapbox использует собственные домены API, браузер может блокировать запросы при:

  • неверной конфигурации access-control-allow-origin
  • попытке проксирования без корректных заголовков

Настройка разрешённых доменов в панели Mapbox

В панели управления токенами задаётся список Allowed URLs:

  • полный домен (example.com)
  • поддомен (app.example.com)
  • локальные адреса (localhost:3000)

Изменения вступают в силу практически мгновенно и применяются ко всем новым запросам.


Практика безопасной конфигурации

Разделение токенов

Используется несколько токенов:

  • production token (ограничен доменом)
  • staging token (для тестовых сред)
  • development token (localhost)

Минимизация области доступа

Рекомендуется:

  • привязывать токен к конкретному домену
  • избегать wildcard * в production
  • ограничивать использование только нужными поддоменами

Использование разных окружений

Пример стратегии:

  • https://app.example.com → production token
  • https://staging.example.com → staging token
  • http://localhost:5173 → dev token

Это снижает риск утечки ключа и его использования вне контекста приложения.


Поведение в SPA и динамических приложениях

В одностраничных приложениях (SPA) важно учитывать:

  • изменение маршрута не влияет на домен
  • проверка происходит только по origin
  • любые API-запросы остаются валидными при том же домене

Однако переход на внешний домен через редирект приводит к блокировке запросов.


Использование в iframe

При встраивании карты в iframe возникают дополнительные ограничения:

  • origin определяется родительской страницей
  • если iframe загружен с другого домена — требуется добавление именно этого домена в whitelist
  • некоторые браузеры усиливают защиту через SameSite политики

Влияние CDN и прокси

При использовании CDN или reverse proxy:

  • домен CDN должен быть добавлен в разрешённые
  • оригинальный backend-домен не используется напрямую
  • важно учитывать, какой origin видит Mapbox API

Частые ошибки конфигурации

  • добавлен только основной домен без поддомена www
  • отсутствует https версия домена
  • не учтён порт разработки
  • wildcard используется без понимания ограничений
  • токен применяется в нескольких проектах без разделения

Логика приоритета проверок

При обработке запроса сервер Mapbox выполняет:

  1. Проверка валидности токена
  2. Проверка разрешённых доменов
  3. Проверка тарифных лимитов
  4. Выполнение API-запроса

Нарушение любого из первых двух этапов приводит к мгновенному отказу без выполнения операций.


Безопасность и компрометация токена

Даже при наличии ограничений по доменам важно учитывать:

  • токен может быть извлечён из клиентского кода
  • ограничения не заменяют серверную авторизацию
  • публичные токены всегда предполагают клиентскую модель безопасности

Поэтому доменные ограничения рассматриваются как слой защиты от случайного или массового злоупотребления, а не как полноценная система аутентификации.


Итоговая модель применения ограничений

Система разрешённых доменов в Mapbox GL JS формирует базовый уровень контроля доступа:

  • привязка API-ключа к конкретным источникам
  • предотвращение использования вне доверенных сайтов
  • изоляция окружений разработки и продакшена
  • контроль интеграций через iframe и CDN

В связке с архитектурой Mapbox GL JS и инфраструктурой Mapbox этот механизм обеспечивает предсказуемое и ограниченное использование картографических API на уровне веб-домена.