Token-Based Authetification в автономных системах посредством Qt6 с использованием Qr-кодов

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Содержание

GitHub репозиторий: https://github.com/ilyaBykonya/TestQtQrAuthorization

  • Часть 1. Введение

  • Часть 2. Сервер

Введение

Представим, что у нас имеется некая автономная система (комп в подвале завода), в которой доступ к благам цивилизации интернету осуществляется посредством звонка дяде Васе, который должен срочно отложить все свои дела и пойти держать антенну, дабы смузихлёбы господа разработчики смогли, например, загрузить на эту систему обновления.

В общем, будем считать, что доступа к сети у нас нет. За исключением наличия китайского Wifi-модуля, способного создать нам точку доступа, и привязать к этой системе пару-тройку периферийных устройств. Этот модуль используется для одновременной работы нескольких людей: зарегистрировались, и пошли по своим делам, а доступ к данным в любой момент с телефона.

С одной стороны, такой расклад не очень удобен, с другой — мы можем считать, что получение физического доступ к такому компьютеру — дело неблагодарное, и никто посторонний к нему не притронется. А вот к его Wifi...

Проблема

Встаёт вопрос: как обеспечить безопасность сетевых запросов на данный агрегат. Вариантов, на самом-то деле, масса:

  • Public/private ключи. Тут всё как в ssh: ставим работягам на мобилки приватный ключ, на машину ставим публичный, и вуаля. Но для этого надо заранее синхронизировать работягу и систему. А это не очень удобно, если пользователей много.

  • Пароль. Ну это совсем нехорошо. У половины паролем будет 12345, у другой — дата рождения (себя, кота, мамы, папы, не важно). Да и менять их тоже ведь никто не будет.

  • Access token — вполне неплохо вариант. Скомпрометировать его сложнее, поскольку выдаётся он прямо при подключении, действует ограниченное время, и получается ограниченным способом.

Простейшая схема
Простейшая схема

В итоге, будем использовать именно доступ к ресурсам через токены. В качестве токенов для простоты будет uuid (потому что Qt умеет их генерить из коробки, и это в принципе не самый плохой вариант), жить он будет, скажем, сутки.

Получение token обычно происходит по https (например, через OAuth), но мы это будем делать посредством сканирования Qr-кода с монитора, выведенного куда-то в более удобное место. В принципе, особой разницы нет, важна лишь доверие к способу получения.

Что будет в статьях

Использование QtHttpServer из Qt6. Свершилось чудо, люди почти десяток лет ждали, и теперь мы имеем http-сервер из коробки. В принципе, штука хорошая, можно делать ручки, есть ssl-конфигурации, парсинг параметров, в общем, неплохо.

Нашёл либу для qr-кодов на Qt на основе liqrencode. Большая часть либ либо слишком близка к Си, либо очень коряво написана, но вот конкретно эта реализация с точки зрения кода мне показалась приятной. Сделал форк, пофиксил багу, и изменил линковку для qmake.

Организуем беспрепятственный доступ с доверенных устройств и временный токенезированный для остальных. Токены будут простыми uuid.

Ну, и, возможно, посмотрим, как можно сканировать Qr-код в приложении под Android, написанном на Qt.

Источник: https://habr.com/ru/articles/733788/


Интересные статьи

Интересные статьи

На основе современной системы сегментации и новой базы данных изображений, сегментированных вручную, которая содержит 4-канальные изображения (RGB+NIR), мы изучаем, как наилучшим образом учесть специф...
История произошла в Telegram-канале БК00010, участником был я. Возник вопрос: как писать программы? Эмулятор не поддерживает запись дисков, поэтому использовать ассемблер в эму...
Перевод главы 13 Параллелизм из книги ‘Expert Python Programming’, Second Edition Michał Jaworski & Tarek Ziadé, 2016 Асинхронное программирование В последние годы асинхронное прог...
Перевод статьи подготовлен специально для студентов курса «Разработчик на Spring Framework». В этой статье мы рассмотрим основы использования Redis через Spring Boot с помощью библиотеки Spr...
Предыстория Так уж случилось, что нужно мне было где-то хранить более 1.5тб данных, да еще и обеспечить возможность скачивания их обычными пользователями по прямой ссылке. Поскольку традиционно ...