Решил я добавить в свой вебсокет-сниппет еще и авторизацию, чтобы уж точно им можно было в реальной жизни пользоваться.
Происходит все достаточно просто. Сервер хранит MD5 пароля (в примере — просто как строковую константу). При соединении генерируется "соль" и вычисляется MD5 от строки "соль + MD5 пароля". Эта "соль" отсылается клиенту. Клиент запрашивает у пользователя пароль, вычисляет MD5 от него, присовокупляет к "соли" и отправляет серверу MD5 результата. Если все ОК, сервер посылает сообщение "authOK", если же пароль неправильный, отсылается "badpass" → клиент опять запрашивает пароль у пользователя.
MD5 введенного пароля сохраняется в localStorage (или куках, если localStorage отсутствует), чтобы не вводить пароль каждый раз. В принципе, можно добавить кнопочку "forget me", но смысла в этом не вижу. Теперь у моих веб-морд будет хоть какая-то условная безопасность.
Я решил набросать веб-морду для управления ИК-спектрометром IRBIS, для чего опять понадобилось прикручивать вебсокеты. И опять пришлось ковыряться в предыдущем коде (веб-морда для простой управлялки на raspberry Pi). Чтобы впредь не нужно было заниматься чисткой кода, я решил сделать минимальный пример, позволяющий общаться через очередь сообщений: код на гитхабе.

Так как вебсокеты у меня используются лишь для управления железяками, т.е. всегда нужен блокирующий доступ, я в этот пример добавил блокиратор левых подключений.

При подключении клиента ему каждую секунду передается текущее время, а клиент может отослать серверу сообщение, введенное в текстовое поле. Таким образом, легко можно будет использовать этот каркас в разных управлялках.

Остается теперь придумать метод авторизации/аутентификации. Простейшее, что приходит в голову — при соединении сервер отсылает "соль", клиент шифрует введенный пароль этой "солью" и отсылает серверу. А тот проверяет, все ли ОК.
Нужно лишь найти вменяемые MD5 или SHA на жабоскрипте.

P.S. Полдня убил на верстку базы веб-морды! Совсем уже этот HTML забыл. Пытался верстать блоками, но ничего не вышло. Решил по-старому — вложенными таблицами.
Сегодня я весь день занимался устранением багов и внедрением фич. Теперь веб-интерфейс выглядит так:
2016.01.19_17:13:35



  • Исправлены тормоза при работе с шаговым двигателем (сервер вебсокетов отжирал почти все процессорное время, поэтому тайминги на шаговики были неровными).

  • Удалена возможность передачи видео через вебсокеты (все равно тормозит жутко на "малинке").

  • Добавлен индикатор "прогресса" перемещения подвижки.

  • При изменении IP-адреса теперь не просто сеть перезапускается, а перезагружается "малинка" (т.к. нужно перезапустить совершенно все сетевые сервисы, в т.ч. и сервисы видео и вебсокетов).

  • Ну и немного изменений во внешнем виде.


Осталась, правда, проблема с видео: как-то странно оно себя ведет. Даже при запуске mplayer tv:// видео запаздывает секунд на 10, да еще и какие-то артефакты от предыдущих кадров сохраняются. Чертовщина какая-то!
Сейчас закончил еще одну веб-морду, вот как она выглядит:
2016.01.18_21:07:35


Подробности )

September 2017

S M T W T F S
     1 2
3456789
1011 12 13141516
17181920 212223
24252627282930

Syndicate

RSS Atom

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 04:22 am
Powered by Dreamwidth Studios