Я хочу аутентифицировать клиенты socket.io на основе данных сеанса клиента, созданных Laravel.Laravel 5: аутентификация клиента Socket.io с использованием данных сеанса Laravel
То, что я подумал это:
A - излучающее имя пользователя и адрес электронной почты от клиента к серверу;
B - сохранение данных, которые должен иметь мой сервер socket.io в Redis в php после входа пользователя в систему, а затем чтения его в Node.js на основе идентификатора cookie сессии. Возможно, мне захочется хранить sessionId -> "email, name"
в Redis, если я предпочитаю этот подход .;
C - использование драйвера сеанса Redis в Laravel, декодирование файлов cookie, установленных Laravel, доступ к значениям сеанса Laravel из Node.js, их неэтериализация и декодирование;
Подход А, очевидно, очень небезопасный и может быть использован только для доказательства концепции.
Подход C выглядит лучше, поскольку мне не нужно дублировать или управлять данными сеанса, но только для его декодирования. Этот способ, однако, связывает мое приложение с деталями реализации управляемых сеансов Laravel и, следовательно, не подходит.
Подход B выглядит более перспективным и его проще реализовать. Однако использование подхода B означает, что я должен сам управлять некоторыми данными сеанса, чтобы socket.io мог его прочитать. Это может сделать данные сеанса Laravel и данные сеанса, которые я храню в Redis, взаимно непоследовательными, и это произойдет в какой-то момент времени. В некотором крайнем случае, например, идентификатор с истекшим сеансом может быть повторно использован, и некоторый клиент socket.io будет некорректно аутентифицирован как другой пользователь. На данный момент я не думаю о более тривиальном случае, но из-за этой несогласованности я предполагаю, что существует такой случай, и обе безопасности и UX могут быть скомпрометированы.
Что является более элегантным, надежным и безопасным способом аутентификации пользователя на основе данных сеанса Laravel в приложении socket.io? Если нет принципиально лучших подходов, и я предполагаю, что подход B лучше всего подходит для улучшения согласованности между данными сеанса, которыми я управляю, используя данные сеанса Redis и Laravel.
Весь смысл, насколько я могу судить, это доступ к данным сеанса Laravel за пределами Laravel и php и идентификация клиентов по sessionId, электронной почте и имени пользователя.
Похоже, что это гораздо лучший подход, чем то, о чем я думал. Я читал о JWT, и у меня появилась идея. Было бы здорово, если бы вы немного расширили свой ответ и объяснили, почему JWT будет хорошо работать для аутентификации клиентов socket.io (в случае, если у кого-то есть тот же вопрос). –
Я только что добавил дополнительную информацию о JWT. –