xmoonlight: Клиент запрашивает страницу, сервер отдает ему токен (id сессии), далее клиент хочет авторизоваться - он шлет в отдельном заголовке этот токен и данные для авторизации, на сервере данные верифицируются, в случае успеха клиент со этим токеном может слать другие запросы на хост с этим api.
Здесь, до меня никак не дойдет, зачем мне каждый раз чтото хэшировать на клиенте и потом проверять это на сервере, и как это делать в частности на сервере? - ну например я склеил токен + timastamp + еще чтото, прогнал это через какойто например md5, попало это на сервер, ну и дальше что? как разбирать? зачем это? и что это даст?
xmoonlight: да понимаю, но для чего его применяют здесь? что это дает?
Я так понял мы чтото хэшируем на клиенте, передаем это на сервер, и дальше, что происходит на сервере с хэшем и остальными данными полученными от клиента и что это нам дает?
xmoonlight: Если на клиенте виден механизм генерации хеша, и такой же механизм используется на сервере, то какой вообще с этого смысл? чем это отличается от не подписанного запроса (если просто передавать id сессии в отдельно заголовке)?
xmoonlight: Я понял, единственный вопрос, о том как проверить подписанный токен
Подписываем этим токеном запрос к API (хэшируем: передаём дополнительный параметр HASH) и отправляем запрос (с параметрами API, токеном, хэшем и случайной строкой) на сервер.
Вот пришли на сервер данные с клиента (хэшированный токен и случайная строка), как верифицировать его?
Допустим авторизовываюсь, и сервер мне шлет id сессии в таком виде - s%3A5OaRjPkBLOCCaZa5qdUnN_MaMYhfQeuW.6oGe%2BTpu7ZaLhvNpjrTwksS9uKAmVFZhTYfolEwrKJU - это уже подписанная сессия (так сейчас хранится сессия в куке браузера). В таком случае мне нужно что-то еще подписывать на клиенте? Можете шаг #1 и #2 поподробнее изложить с примером заголовков? Не очень понятно в каком виде, в какой момент и что именно я должен получить от сервера, и что сделать на клиенте.
ipc_ngs, спасибо!
буду вам признателен, если бы вы на моем примере продемонстрировали как это будет работать? мне бы было легче оттолкнуться от этого..
Александр Аксентьев: вы имеете ввиду для каждого клиента делать свой room?
Например при коннекте делать socket.join('room_user_0000001');
А когда хотим отправить что-то ему, то с любого процесса уже можно сделать так:
io.to('room_user_0000001').emit(event,data);
Я вас правильно понял? Если нет то поправьте пожалуйста!
Тимур Шемсединов: а вот в моем вопросе юзер "@Sanasol" говорит что это возможно, только я не пойму что он хочет сказать, может вы вмешаетесь в обсуждение и дадите свой комментарий по этому поводу?
Александр Аксентьев: Вы наверное не поняли, или скорее всего не прочитали вопрос. Я говорю об отправке события из контроллера с одного процесса, КОНКРЕТНОМУ клиенту который авторизован на другом. А вы что пытаетесь мне объяснить? Если можете, приведите конкретный пример, а если нет - то бессмысленно то что вы пишете, тем более я делал кластер опираясь на эту же документацию
Тимур Шемсединов: а как же решать задачи такого рода? не могут же все приложения использующие socket.io работать в одном потоке или пределах одной физ. машины... Ресурс сервера же не резиновый(
Дмитрий Вапельник: спасибо, очень полезная информация! Но я уже сделал немного по-другому, через redis-storage, и в класс который порождает кронджобы (в мастере) я передал объект сокет-сервера, и теперь каждая кронджоба себе наследует его, и благодаря redis-store я из джобы делаю emit, и данные получают клиенты на всех воркерах. Все работает на ура)
Александр Аксентьев: спасибо, рассмотрю этот вариант. Но думаю, в моем случае все же лучше всего как-то расшарить все сокет соединения чтобы были доступны в любом месте , пока только не пойму как.
Я использую io.adapter(redis({host: h, port: p})); т.к. для работы в кластере он необходим для socket.io.
Вы можете подробнее рассказать, примеры может?
Здесь, до меня никак не дойдет, зачем мне каждый раз чтото хэшировать на клиенте и потом проверять это на сервере, и как это делать в частности на сервере? - ну например я склеил токен + timastamp + еще чтото, прогнал это через какойто например md5, попало это на сервер, ну и дальше что? как разбирать? зачем это? и что это даст?