2014-03-30 5 views
0

У меня есть веб-приложение, написанное на php и планирую добавить к нему функции чата. Я решил использовать node.js, поскольку это кажется идеальным для работы, и php sorta воняет для такого рода вещей.Аутентификация между php и node.js

В какой-то момент мне нужно убедиться, что запрос на сервер socket.io является законным. Мне нужно убедиться, что запрос получен с страницы, сгенерированной php. пытаясь сохранить его, я придумал эту идею. Итак, процесс клиент/сервер будет:

  1. Клиент открывает веб-страницу, а php получает запрос. Php создает хеш своего рода и связывает узел http-сервера через GET. Это я думал просто закрутить 127.0.0.1 и передать хэш не уверен, что это будет так же легко, хотя с запуском apache уже.

  2. Узел получил бы это и сохранил бы его как свойство в объекте, поэтому следующие запросы от клиента будут иметь к нему доступ.

  3. Когда curl возвращается, php отображает страницу и передает этот хэш клиенту.

  4. Клиент отправляет запрос серверу узлов на каком-либо порту, передает этот хэш и вызывает обратный вызов. Теперь узел проверяет хэш является одним из свойств объекта I, описанного в шаге 2

  5. Если хэш ОС один из свойств затем обработать запрос, в противном случае что-то хитроумное происходят и игнорировать его

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

+0

Я бы рекомендовал хранить маркер в БД таблицы (возможно, маркер столбца на таблицу пользователей) и отправить маркер пользователя. Теперь, когда пользователь подключается к node.js, токен отправляется, а node.js проверяет его с помощью таблицы users. –

+0

Проблема с вашей настройкой заключается в том, что токены пользователя будут потеряны, если перезапуск узла сервера или что-то в этом роде. –

+0

свяжите их nodephp как – Smash

ответ

0
  1. Стандартная схема. Используйте redis-memcached-RDMS для сохранения токена на стороне сервера.

    • + быстрый
    • + вы должны реализовать Механизм лексемы создания в одном месте
    • - все маркеры могут быть потеряны в некоторых случаях
  2. Подпись печенье техника.

Создать токен на стороне php. Как

$token = some_special_hash_not_md5_not_sha1(
       $userID . $server_side_super_safe_salt); 

Отправка через токен cookie и идентификатор пользователя.

Проверить на стороне узла этот знак действителен.

  • + нет дб
  • - должны найти функцию на узле и PHP, которые производят идентичные подписи
  • - Вы должны знать много о шифровании, если вы хотите создать безопасный код

Для пример.Если some_special_hash_not_md5_not_sha1() будет PBKDF2некоторые люди могут DDos вас с большой $userID

Tips on signed cookies instead of sessions

Смежные вопросы