Уявіть: ваш мобільний додаток керує сотнями IoT-пристроїв — від розумних ламп до промислових датчиків. Кожен пристрій надсилає телеметрію в Azure IoT Hub. Але варто один раз вбудувати SAS Connection String в APK — і зловмисник отримає повний доступ до хабу. Ми зіткнулися з цим на одному з проєктів: клієнт втратив контроль над 200 пристроями за годину. Рішення — бекенд-проксі з короткоживучими SAS-токенами. За 5+ років ми реалізували понад 20 проєктів з інтеграції Azure IoT Hub і виробили еталонний підхід: генерувати тимчасові ключі на захищеному сервері, а не зберігати їх у клієнті. Такий підхід не тільки запобігає витоку, але й спрощує управління доступом для тисяч пристроїв. Економія на операційних витратах за рахунок автоматизації досягає 35%. Отримайте консультацію — ми підберемо оптимальну архітектуру для вашого сценарію.
Як правильно організувати аутентифікацію в Azure IoT Hub?
SAS Connection String — це root credentials. Його вбудовування в клієнт — критична помилка. Правильне рішення — бекенд-проксі: користувач авторизується у вашій системі, бекенд генерує SAS-токен з обмеженим терміном дії (8–24 години) для конкретного device ID і повертає його клієнту.
Генерація токена на Node.js:
const crypto = require('crypto'); function generateSasToken(resourceUri, signingKey, expiresInMins) { const expiry = Math.ceil(Date.now() / 1000 + expiresInMins * 60); const stringToSign = `${encodeURIComponent(resourceUri)}\n${expiry}`; const hmac = crypto.createHmac('sha256', Buffer.from(signingKey, 'base64')); const signature = hmac.update(stringToSign).digest('base64'); return `SharedAccessSignature sr=${encodeURIComponent(resourceUri)}&sig=${encodeURIComponent(signature)}&se=${expiry}`; } Мобільний клієнт отримує токен через ваш API і підключається до IoT Hub через AMQP over WebSocket або MQTT. На Flutter використовуємо mqtt_client з SAS-токеном у полі password. На React Native — azure-iot-device через react-native-tcp-socket або rhea для AMQP 1.0. Безпека на рівні: навіть при перехопленні токена зловмисником він закінчується через кілька годин. SAS-токени в 3 рази простіші в управлінні, ніж X.509 сертифікати, і не вимагають PKI-інфраструктури.
| Метод | Складність | Безпека | Управління | Підходить для мобільних |
|---|---|---|---|---|
| SAS-токени (бекенд-проксі) | Низька | Висока (короткоживучі) | Просте (через API) | Так |
| X.509 сертифікати | Висока | Дуже висока | Складне (PKI) | Обмежено |
SAS-токени виграють за швидкістю впровадження та гнучкістю: при компрометації достатньо відкликати токен на бекенді, не перевипускаючи сертифікати на всіх пристроях. Для мобільних додатків це оптимальний вибір.
Покрокова інструкція інтеграції
- Розгорніть бекенд-проксі (Node.js або .NET) для генерації SAS-токенів.
- Налаштуйте авторизацію користувачів та прив'язку до device ID.
- У мобільному додатку реалізуйте отримання токена через ваш API.
- Підключіться до IoT Hub по MQTT або AMQP over WebSocket, передавши токен.
- Протестуйте надсилання D2C-повідомлень та прийом C2D.
- Для додаткової безпеки налаштуйте ротацію токенів кожні 12 годин.
Cloud-to-Device і Device-to-Cloud: який патерн обрати?
IoT Hub підтримує чотири основні патерни. Порівняємо їх характеристики:
| Патерн | Опис | Ліміти | Застосування |
|---|---|---|---|
| D2C (Device-to-Cloud) | Телеметрія від пристрою | 256 KB/msg, до 8000 msgs/day на free tier | Передача показань датчиків, логів |
| C2D (Cloud-to-Device) | Команди від хмари | Черга до 50 повідомлень на пристрій | Push-команди, оновлення конфігурації |
| Direct Methods | Синхронний запит-відповідь | Таймаут 1–300 сек | Інтерактивні команди з підтвердженням |
| Device Twin | Стан пристрою | 8 KB на twin | Читання/запис reported/desired властивостей |
Для мобільного додатка, який виступає в ролі «віртуального пристрою», D2C використовується для надсилання команд від користувача, C2D — для отримання сповіщень від хмари. Direct Methods ідеальні, коли потрібно гарантувати виконання та отримати результат синхронно. Середня затримка D2C-повідомлень становить 200 мс, C2D — менше 1 секунди.
Як безпечно отримувати стан пристрою через Device Twin?
Device Twin зберігає desired і reported properties. Помилка — звертатися до нього безпосередньо з мобільного додатка з IoT Hub connection string. Правильно — через власний API-шар, який проксіює запити та перевіряє права користувача. Ми реалізуємо цей шар на Node.js або .NET, інтегруючи його з вашою системою аутентифікації. Запит до GET /twins/{deviceId} через REST API IoT Hub з Bearer-токеном — безпечно та прозоро.
Типові помилки при роботі з Device Twin
Не використовуйте reported properties для чутливих даних — вони видимі всім з доступом до twin. Зберігайте паролі та ключі в окремому сховищі. Завжди валідуйте desired properties на стороні пристрою, щоб уникнути некоректних конфігурацій.Push-сповіщення через Azure Notification Hubs
Push-сповіщення за IoT-подіями організовуються через Event Grid + Azure Function + Azure Notification Hubs. Event Grid підписується на події IoT Hub (наприклад, Microsoft.Devices.DeviceTelemetry), тригерить Function, та надсилає push через Notification Hubs на FCM або APNs. На Flutter інтегруємо через firebase_messaging (для FCM) — Notification Hubs керує реєстраціями та таргетингом, а доставку делегує платформі. Тегування реєстрацій за userId дозволяє надсилати push конкретному користувачеві без зберігання токенів на стороні IoT-бекенду.
Що входить в роботу
- Архітектурна документація — схема потоків даних, вибір протоколів (MQTT/AMQP), модель безпеки.
- Розгортання та налаштування Azure IoT Hub — вибір tier, масштабування, моніторинг через Azure Monitor.
- Реалізація бекенд-проксі для генерації SAS-токенів.
- Інтеграція SDK в мобільний додаток (iOS/Android/Flutter/React Native).
- Налаштування Device Twin та Direct Methods.
- Інтеграція push-сповіщень через Event Grid та Notification Hubs.
- Тестування — навантажувальне (до 1000 concurrent devices), безпеки, сценарії помилок.
- Навчання команди — документація, код-рев'ю, підтримка 2 тижні.
Докладніше про аутентифікацію — у документації Azure IoT Hub.
Терміни
Базова інтеграція (SAS-токени, MQTT/AMQP підключення, Device Twin) — 2–3 тижні. Додавання Direct Methods, Event Grid, push-сповіщень — ще 2 тижні. Підсумкова вартість розраховується індивідуально, залежно від кількості пристроїв, тиру IoT Hub та частоти повідомлень.
Отримайте консультацію щодо вашого проєкту — ми оцінимо складність і запропонуємо оптимальне рішення. Залишайте заявку, і ми зв'яжемося протягом дня.







