ДОВІДНИК З NODE-RED українською мовою
https://flows.nodered.org/flow/5a0614db288deab2acb408d4bdcc9db0
Цей потік забезпечує «Авторизацію на основі файлів cookie» для кінцевих точок HTTP, які призначені лише для певних користувачів.
Цей потік є частиною набору node-red-authorization-examples, але також опублікований тут для полегшення пошуку
Попередні умови
Для цього прикладу потрібне таке розширення Node-RED:
Крім того, він очікує, що глобальний контекст потоку міститиме об’єкт під назвою UserRegistry
, який має такий же формат, як описано в “node-red-within-express”:
У разі використання поза «node-red-within-express» наведені нижче потоки дозволяють завантажувати такий реєстр із зовнішнього файлу JSON під назвою registeredUsers.json
(або створювати, якщо такого файлу не існує або існуючий файл неможливо завантажити) і повертається після змін:
Ці потоки вже є частиною цього прикладу, але їх можна видалити (або налаштувати), якщо вони не потрібні.
Для цілей тестування та налагодження також можна імпортувати такий потік, який при натисканні виводить поточний вміст реєстру користувачів на консоль налагодження Node-RED:
Цей потік також уже є частиною цього прикладу.
Колекція Postman
З метою тестування репозиторій GitHub для цього прикладу додатково містить колекцію Postman. з кількома заздалегідь визначеними запитами.
Популярний підхід полягає в тому, щоб дозволити користувачам ввійти в систему та створити маркери доступу, які потім використовуються як «куки» для зв’язку між браузером і сервером. Браузери автоматично прикріплюють такі файли cookie до кожного запиту, а маркери, що містяться, можуть бути розроблені так, щоб вони «закінчувалися» або видалялися після «виходу».
Маркер у цьому прикладі складається з ідентифікатора користувача та терміну дії. Хоча він зберігається у вигляді звичайного тексту (і, отже, може перевірятися клієнтом), його значення захищено «дайджестом повідомлення» — як наслідок, будь-яка спроба змінити маркер неминуче буде розпізнана та призведе до втрати авторизації . З іншого боку, будь-яка успішна перевірка токена автоматично оновлює цей токен, тому термін дії токенів фактично закінчується лише після певного часу бездіяльності.
Ключ, який використовується для створення дайджестів повідомлень, вибирається випадковим чином під час запуску сервера – тому перезапуск сервера автоматично призведе до втрати всіх активних маркерів.
Час життя токена можна налаштувати - за замовчуванням встановлено 2 хвилини.
Щоб «увійти», надішліть форму, що містить змінні UserId
і Password
, у правильну кінцеву точку (/cookie-auth
у цьому прикладі).
Примітка: чинне законодавство часто вимагає, щоб користувачі були поінформовані про використання файлів cookie. Файл cookie, який тут використовується, вважається «технічно необхідним файлом cookie», який не можна заборонити, якщо очікується, що відвіданий сайт працюватиме, як передбачено.
Верхні результати використовуються для успішної автентифікації та входу в систему, нижні – для невдалих.
Якщо ви вимагаєте, щоб користувач, який автентифікувався, мав певну роль, ви можете встановити для msg.requiredRole
цю роль перед тим, як викликати cookie auth
або cookie login
- інакше ролі користувачів не перевірятимуться.
Після успішної автентифікації msg.authenticatedUser
містить ідентифікатор автентифікованого користувача, а msg.authorizedRoles
містить (можливо, порожній) список із ролями цього користувача.
У наступному прикладі показано, як інтегрувати автентифікацію на основі файлів cookie в потоки Node-RED:
(Колекція Postman, згадана нижче, полегшує ці кроки.)
Надсилання запитів GET без попереднього входу (або після закінчення терміну дії маркера) має завершуватися помилкою з кодом статусу 401 (Неавторизовано)
Запит на вхід має містити або
UserId
і Password
, абоUserId
і Password
, щонайменшеДодаткові властивості об’єкта або змінні форми ігноруватимуться самою автентифікацією, але передадуться будь-яким наступним вузлам.
Успішний вхід, перевірка маркера та оновлення маркера завжди додають відповідний файл cookie у властивість cookies
об’єкта msg
, який, таким чином, автоматично стає частиною відповіді потоку.
Будь-яка помилка входу або перевірки маркера автоматично видаляє файл cookie маркера, що можна порівняти з виходом із системи.
Автоматичні тести
Репозиторій GitHub для цього прикладу також містить деякі потоки для автоматизованих тестів.