Как проверить подписанный cookie-файл по его подписи? - PullRequest
0 голосов
/ 10 июня 2019

Я использую cookie-session и могу декодировать cookie из заголовков, используя это решение https://github.com/expressjs/cookie-session/issues/117#issuecomment-452046225:

// session=eyJwYXNzcG9ydCI6eyJ1c2VyIjoiNWNiMzdiYzUzZTA2M2YxN2U2M2EzNDdkIn19; session.sig=wCuMz6lIsok00-Dqir3pnblJcAc
const parsedCookies = cookie.parse(req.headers.cookie)
const session = JSON.parse(Buffer.from(parsedCookies.session, 'base64').toString('utf8'))

Если это правильно, я хочу разрешить клиенту устанавливать соединение с WebSocket.

Также у меня есть подпись, которая находится внутри parsedCookies.sig.

Значение сеанса похоже на это:

{ passport: { user: '5cb37bc53e063f17e63a347d' } }

Я вижу это значение на стороне сервера, и оно верное. Но я хочу знать, не было ли это изменено пользователем, поэтому я хочу проверить session против значения sig. Если он изменен, я хочу закрыть соединение WebSocket.

Как мне это сделать?

1 Ответ

0 голосов
/ 10 июня 2019

Я предложу использовать токен JWT для генерации токена. JWT использует секретный ключ для кодирования параметров, предоставленных для генерации токена, обычно мы предоставляем имя пользователя, метку времени и идентификатор пользователя.

Выполните следующие шаги,

  1. Хранить сгенерированный токен в файлах cookie, а также сохранять его в базе данных для проверки при каждом запросе.
  2. Отправляйте этот файл cookie с каждым запросом, на стороне сервера, пишите промежуточное программное обеспечение для аутентификации, которое будет проверять этот файл cookie путем декодирования с использованием секретного ключа, который использовался для создания токена. Таким образом, вы можете проверить, если токен изменен или нет.

Для более подробной информации, вы можете посетить JWT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...