Как следить за валидностью соединения websocket после авторизации?
Чтобы сделать уведомления для клиента в реальном времени решил использовать WS, но возник вопрос о безопасности данных. В http запросах авторизация происходит при каждом запросе, передавая JWT токен, тем самым контролируя доступ к аккаунту, ресурсам.
При WS выполнить авторизацию можно передав токен первым сообщением и получить результат от сервера, если все ок, то соединение можно продолжить и посылать информацию клиенту.
А что дальше, как следить за тем, что у пользователя все еще имеется доступ после авторизации? Например, пользователь может выйти из аккаунта (при этом токен попадает в черный список), сменить пароль или права доступа могут измениться, ведь после такого http запросы не будут срабатывать, а соединение WS останется, что плохо.
Как можно решить эту проблему?
Ответы (1 шт):
При соединении клиента с сервером при помощи websocket:
- Производится аутентификация пользователя. Как вы верно написали, это можно сделать, например, через первое сообщение от клиента серверу. После успешной аутентификации добавьте вебсокет пользователя в менеджер вебсокетов, не закрывая соединения. Можете использовать словарь, где ключём будет id пользователя, а значением - объект вебсокета.
- При любых действиях пользователя, таких как: выход, смена пароля и т.п. или системных правках по типу смен прав доступа, проверяйте, нет ли текущего соединения с клиентом этого пользователя в менеджере вебсокетов, о котором я писал ранее, и, в случае его наличия, принудительно разрывайте соединение