Как следить за валидностью соединения websocket после авторизации?

Чтобы сделать уведомления для клиента в реальном времени решил использовать WS, но возник вопрос о безопасности данных. В http запросах авторизация происходит при каждом запросе, передавая JWT токен, тем самым контролируя доступ к аккаунту, ресурсам.

При WS выполнить авторизацию можно передав токен первым сообщением и получить результат от сервера, если все ок, то соединение можно продолжить и посылать информацию клиенту.

А что дальше, как следить за тем, что у пользователя все еще имеется доступ после авторизации? Например, пользователь может выйти из аккаунта (при этом токен попадает в черный список), сменить пароль или права доступа могут измениться, ведь после такого http запросы не будут срабатывать, а соединение WS останется, что плохо.

Как можно решить эту проблему?


Ответы (1 шт):

Автор решения: Evil Giraffe

При соединении клиента с сервером при помощи websocket:

  1. Производится аутентификация пользователя. Как вы верно написали, это можно сделать, например, через первое сообщение от клиента серверу. После успешной аутентификации добавьте вебсокет пользователя в менеджер вебсокетов, не закрывая соединения. Можете использовать словарь, где ключём будет id пользователя, а значением - объект вебсокета.
  2. При любых действиях пользователя, таких как: выход, смена пароля и т.п. или системных правках по типу смен прав доступа, проверяйте, нет ли текущего соединения с клиентом этого пользователя в менеджере вебсокетов, о котором я писал ранее, и, в случае его наличия, принудительно разрывайте соединение
→ Ссылка