Про те, як застосувати Node.js для серверної частини Інтернету речей. Розбираємося з питаннями безпеки і показуємо пару реальних прикладів інтеграції платформи в IoT.
1. Оцінка стану ринку
У 2019 ринкова виручка IoT досягла 212 мільярдів доларів. У світі налічується близько 26,7 мільярда підключених пристроїв IoT. До 2025 року це число досягне 75,4 мільярда.
За оцінками ООН, на лютий 2020 року чисельність населення становить 7,7 мільярда чоловік. У середньостатистичної людини є близько 3-4 пристроїв IoT. Напевно у вас є хоча б одby з таких пристроїв: смарт-годинник, фітнес-трекер, смарт-ТВ або, може бути, навіть «розумна» машина.
Очікується, що в 2025 році чисельність населення досягне 8,1 мільярда чоловік і на кожну людину припадатиме 9-10 IoT-пристроїв.
Думаємо, ви вже зрозуміли до чого ми хилимо. Напевно ви були б не проти приєднатися до цього ринку і тим більше, щоб ваш IoT-пристрій буd одним з тих дев'яти-десяти, що будуть у кожного.
Статистичні дані отримані від Statista і ООН.
2. Вибір правильного фреймворка
Клієнтська частина IoT-пристроїв представлена самим апаратним забезпеченням. Вона написана на C, C ++ , Lua та інших низькорівневих мовах програмування. Через апаратні обмеженя з цим нічого не поробиш.
Поряд з високою продуктивністю, користувачі IoT-пристроїв віддають пріоритет низької вартості і енергоефективності. Тому додатки для пристроїв слід писати на низькорівневих мовах. Принаймні, поки що.
Але ви ніяк не обмежені у виборі фреймворка і мови програмування для серверної частини IoT-додатків. На наш погляд, Node.js - правильний вибір. І ось чому.
2.1. Швидкість і продуктивність
Так як будь-який IoT-пристрій постійно працює з динамічними даними, потрібен фреймворк, здатний працювати з додатками, що працюють в режимі реального часу і з великими об'ємами даних.
Node.js працює на високоефективному і масштабованому JavaScript движку V8 від Google. Внаслідок цього Node.js є основною платформою для роботи з додатками, що працюють в режимі реального часу і постійно змінюваними даними.
2.2. Node.js легко інтегрується з протоколами IoT
Додатки інтернету речей активно використовують протокол MQTT для обміну повідомленнями між пристроями. Для транспортування і інкапсуляції цей протокол задіє WebSockets. Як MQTT, так і WebSockets добре підтримуються і легко інтегруються з Node.JS.
2.3. Модулі Node.js полегшують розробку IoT
У Node.js є npm (менеджер пакетів, англ. Node Package Manager) з безліччю корисних пакетів для IoT-пристроїв. Існує близько 80 пакетів для Intel IoT Edison, Arduino і Raspberry Pi. Крім того, він містить більше 30 пакетів для різних датчиків, маячків і модулів.
2.4. Ресурсоефективність і масштабованість
Розробники вважають за краще працювати з Node.js, так як він не вимагає великого обсягу ресурсів. Процесор і оперативна пам'ять не перевантажені. Крім того, Node.js має високу масштабованість, що абсолютно необхідно для більшості сучасних компаній.
3. Уникаємо підводних каменів
Вхід в нішу IoT може привести вас до успіху. Перша і найголовніша задача, яку ви повинні вирішити, - безпека.
3.1. Безпечна аутентифікація
Існує безліч інструментів для аутентифікації в Node.js: токени, JWT, Auth0 і т.д. Кожен з них має свої переваги і недоліки. Для початку подивимося на них з точки зору IoT.
Токени ефективні, але не на 100% безпечні. Вони є відмінним способом налаштування аутентифікації, так як дозволяють ідентифікувати конкретного користувача і прийняти рішення про те, надавати чи забороняти йому доступ. Токен може бути зашифрований будь-яким алгоритмом.
Однак, апаратне забезпечення (сканери, датчики, хаби і інші штуки IoT) мають зберігати цей токен або дані логіна в прошивці. Це означає, що зловмисники можуть вкрасти токен, якщо у них є фізичний доступ до апаратних засобів. Те ж саме стосується JWT і Auth0.
З іншого боку, ви можете використовувати будь-які інструменти для аутентифікації на стороні сервера і інтегрувати такий інструмент в платформу Node.js. Є багато npm-пакетів, які дозволяють зробити це вручну: Auth0, Passport і JWT. Є також пакети для інтеграції з хмарними IoT-сервісами: @ azure-iot / authentication , aws-iot-device-sdk і т.д.
3.2. Безпечні HTTP запити
Зверніть увагу на HTTP-запити з IoT-пристроїв. Ви повинні перевірити, чи отримуєте ви запит від відповідного IoT-пристрою.
Використовуйте HTTPS для передачі даних між IoT-пристроями. Устаткування - не браузер, вирішити питання з HTTPS потрібно самостійно. Для серверної частини ви можете зробити це вручну або використовувати хостинг з налаштуванням HTTPS і сертифікатами.
У Node.js це досить легко реалізувати:
const express = require('express');
const https = require('https');
const http = require('http');
const fs = require('fs');
const options = {
key: fs.readFileSync('path/to/your/key.pem'),
cert: fs.readFileSync('path/to/your/certificate.cert')
};
const app = express();
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);
HTTPS використовує протоколи SSL або TLS для шифрування даних. Щоб переконатися, що ви отримали запит від потрібного сервера або клієнта, використовуйте додаткове шифрування даних. Наприклад, ось так можна використовувати підпис:
const fetch = require('node-fetch');
const verifier = crypto.createVerify('RSA-SHA1')
const SIGNATURE_FORMAT = 'base64';
//check if it trusted url for your certificate
const trustedUrl = ‘https://trustedUrl/’
const isTrustedUrl = trustedUrl.match(url);
If (isTrustedUrl) {
verifier.update(req.body, 'utf8')
fetch(isTrustedUrl)
.then(certificate => {
// check signature
const isValidSignature = verifier.verify(certificate, reg.header.signature, SIGNATURE_FORMAT);
})
.catch(err => console.log(err));
}
далі:
- Перевірте довірений URL вашого сертифіката.
- Підпишіть тіло запиту відкритим ключем з сертифіката.
- Порівняйте підпис з тіла запиту з підписом з заголовка.
- Надзвичайно важливо знати, що ви отримуєте запити з відповідних пристроїв, і не стикаєтеся з атакою десь посередині.
0 комментариев
Добавить комментарий