У меня есть приложение Flask-SocketIO, которое аутентифицировано с базовой аутентификацией.Я пытаюсь убедиться, что все мои сообщения socketio также защищены, по крайней мере, в той же степени, что и базовая аутентификация.
Из документации Flask-SocketIO по аутентификации :
Однако в большинстве случаев удобнее выполнять традиционный процесс аутентификации до установления соединения SocketIO.Затем личность пользователя может быть записана в сеансе пользователя или в файле cookie, а затем, когда соединение SocketIO установлено, информация будет доступна обработчикам событий SocketIO.
Таким образом, я пытаюсь выяснитьузнать, как хранить что-то безопасное в пользовательской сессииДопустим, я делаю следующее: сначала для входа в систему я подписал хэшированные имя пользователя и пароль:
from flask import session
from itsdangerous import Signer
signer = Signer('super secret key')
def login(username: str, password: str):
if (username, password) in credentials:
hashed = hash(username + password)
session['user'] = s.sign(hashed)
Затем я могу создать декоратор для моих слушателей socketio, который просто проверяет, что подписанное значение в сеансе является действительным:
def authenticated_only(f):
@functools.wraps(f)
def wrapped(*args, **kwargs):
try:
signer.unsign(session['user'])
return f(*args, **kwargs)
except BadSignature:
disconnect()
return wrapped
@socketio.on('my event')
@authenticated_only
def handle_my_custom_event(data):
pass
Это разумный подход?Есть ли подводные камни, которые мне не хватает?Это бессмысленно, потому что я использую базовую аутентификацию?