Навіщо і як будувати Інтернет речей з Node.js

  • 23 февраля, 13:13
  • 3817
  • 0

Про те, як застосувати Node.js для серверної частини Інтернету речей. Розбираємося з питаннями безпеки і показуємо пару реальних прикладів інтеграції платформи в IoT.

Навіщо і як будувати Інтернет речей з Node.js

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 комментариев
Сортировка:
Добавить комментарий