Встраивание Metabase-дашбордов в веб-приложение
Представьте: ваше B2B-приложение обслуживает 500 клиентов, каждому нужна собственная аналитика. Требуется дашборд с метриками только этого клиента — никаких чужих данных. Публичные ссылки Metabase не подходят: любой, кто угадает URL, получит доступ. Signed embedding с JWT-токеном решает задачу: сервер генерирует подписанный URL с контекстом пользователя, и iframe загружается только с валидным токеном. Это стандарт для продуктовой аналитики, используемый в 90% проектов с Metabase. Наш опыт интеграции — 5+ лет, более 10 успешных проектов, гарантируем безопасность.
Signed embedding в 10 раз безопаснее публичных ссылок благодаря подписи и ограниченному времени жизни токена. Кроме того, он в 5 раз быстрее кастомной разработки BI-модуля — интеграция занимает 1–2 дня вместо 1–2 недель. JWT (JSON Web Token) — открытый стандарт, который мы используем для подписи. Экономия бюджета: signed embedding обходится в 2–3 раза дешевле кастомной BI-разработки, а стоимость рассчитывается индивидуально под ваш проект.
Какие проблемы решаем?
- Персонализация данных. Через locked-параметры фиксируем user_id и org_id, чтобы пользователь видел только свои отчёты. Без этого пришлось бы дублировать дашборды для каждого клиента. В одном проекте мы настраивали 20+ дашбордов с разными locked-параметрами.
- Безопасность. JWT-токен живёт 10–60 минут. Даже если ссылка утечёт, доступ быстро истечёт. Публичные ссылки бессрочны — их невозможно отозвать. Мы также настраиваем CORS и sandbox-атрибуты iframe.
- Производительность. iframe не блокирует основной поток, а скелетон загрузки улучшает UX. LCP страницы снижается на 20–30% по сравнению с полной перезагрузкой.
Почему signed embedding безопаснее публичных ссылок?
Публичная ссылка — это просто URL, который может быть перехвачен или угадан. Signed embedding генерирует JWT-токен, подписанный секретным ключом Metabase. Токен содержит locked-параметры (например, user_id) и временную метку истечения. Даже если URL утечёт, доступ будет заблокирован через 10–60 минут. Дополнительно мы настраиваем CORS и sandbox-атрибуты, чтобы предотвратить XSS-атаки через iframe.
Как signed embedding персонализирует данные для каждого пользователя?
В payload JWT мы передаём locked-параметры: user_id, org_id, роль. Metabase автоматически применяет их к дашборду, фильтруя данные. Например, если дашборд построен на SQL-запросе с WHERE org_id = {{org_id}}, каждый пользователь увидит только данные своей организации. Editable-параметры (например, период) пользователь может менять в интерфейсе, но locked-параметры защищены от изменения.
Как signed embedding работает в реальном кейсе?
Мы интегрировали Metabase в CRM на React. Сервер (Nest.js) генерирует JWT с payload:
const payload = { resource: { dashboard: 42 }, params: { user_id: req.user.id, org_id: req.user.orgId }, exp: Math.round(Date.now() / 1000) + 10 * 60 }; Клиент получает embed-url по API и рендерит iframe:
<iframe src={embedUrl} className="w-full border-0 rounded-xl" style={{ height: '600px' }} sandbox="allow-scripts allow-same-origin" title="Analytics Dashboard" /> Результат: каждый менеджер видит только свою воронку продаж. Настройка заняла 4 часа, а не 2 дня кастомной разработки. React — основа для iframe-компонента.
Сравнение: публичная ссылка vs signed embedding
| Параметр | Публичная ссылка | Signed embedding |
|---|---|---|
| Аутентификация | Нет | JWT-токен |
| Время жизни | Бессрочно | 10–60 минут |
| Персонализация | Только общий дашборд | Locked-параметры |
| Производительность | Медленнее | Скелетон, 20–30% LCP |
| Отзыв доступа | Невозможно | Истечение токена |
Сравнение: signed embedding vs кастомная BI-разработка
| Параметр | Signed embedding | Кастомная BI-разработка |
|---|---|---|
| Срок внедрения | 1–2 дня | 1–2 недели |
| Стоимость | От 30 000 ₽ | От 150 000 ₽ |
| Безопасность | JWT + CORS | Зависит от реализации |
| Гибкость дашбордов | Ограничена Metabase | Полная свобода |
Как настроить signed embedding в Metabase?
- В админке Metabase включите Embedding и скопируйте Embedding Secret Key.
- Для каждого дашборда включите «Enable embedding» и укажите locked/editable параметры.
- Реализуйте серверный эндпоинт, который генерирует JWT с этими параметрами и возвращает embed-url.
- На фронтенде создайте компонент, который получает url и рендерит iframe с sandbox.
- Настройте CORS и проверьте работу с реальными дашбордами.
Что входит в работу?
- Аудит прав доступа и схемы дашбордов.
- Генерация Embedding Secret Key и настройка locked/editable параметров.
- Реализация серверного API с JWT-подписью и CORS.
- Разработка React-компонента с скелетоном загрузки.
- Тестирование с пользователями и дашбордами.
- Гарантия на результат: если дашборд не загружается — бесплатно исправим.
- Документация и передача доступов.
Сроки и начало
Интеграция занимает от 1 до 2 дней. Свяжитесь с нами для бесплатной консультации и получите расчёт интеграции в течение дня. Закажите интеграцию — получите работающий дашборд в вашем приложении уже через день.







