Наиболее корректная реализация авторизации по QR-коду
Коллеги, доброго времени суток, вопрос заключается в наиболее правильной реализации авторизации по QR-коду. Генерация QR-кода происходит следующим образом:
1.1)На стороне сервера создается постоянный секретный ключ и соль
2.1)Логин и пароль шифруется при помощи секретного ключа и соли из шага номер 1.1 в строку 20-30 символов в длину(URL Safe Base64 кодировка)
3.1)Из зашифрованного логина и пароля формируется QR-код содержащий URL(GET метод): https://localhost:8000/account/auth?login=<encrypted_login>&password=<encrypted_password>
При считывании QR-кода происходит следующее:
1.2)Сервер реагирует на GET запрос по адресу: /account/auth
(сформирован на шаге 3.1)
2.2)Сервер расшифровывает login и password из GET параметров используя соль и секретный ключ из шага номер 1.1
3.3)По расшифрованным логину и паролю клиент авторизуется(если данные неправильные то сервер отвечает 401)
Данный способ авторизации обладает следующими отрицательными свойствами:
1.3)Любой человек получивший QR-код сможет авторизоваться в системе
2.3)Ограничение авторизации возможно если изменить: секретный ключ, соль, логин или пароль.
Исправление ситуации возможно при следующих доработках:
1.4)При авторизации на стороне клиента и сервера будет создаваться специальная cookies которая будет говорить о том, что именно это устройство авторизовано. При попытке авторизации из другого устройства будет возвращено 401 или похожее(попытка ограничения авторизации из нежелательных устройств)
2.4)Для каждой сессии авторизации будет создан свой секретный ключ или(и) соль, которые будут приходить в негодность спустя время, что позволит контролировать каждую авторизацию(совместимо с шагом 1.4, позволяет контролировать длительность авторизации)
Прошу Вас помочь в поиске наиболее правильного и безопасного способа авторизации, возможно ответ на данный вопрос поможет многим разработчикам, заранее спасибо!
Дополнительная информация:
1)Секретный ключ не менее 40 символов в длину
2)Серверная часть: python3.9 + Django 4
Для авторизации по qr нужно , чтоб одна из сторон была авторизована другим способом. В qr коде передается id и otp связанный с id.
Или уже авторизованный телефон сканируя авторизует комп.
Или авторизованный комп авторизует телефон.
Напечатать qr и авторизоваться по нему - это бред. Нет никакой разницы зашифрован там пароль или нет если по нему можно зайти.