Защитите приложение Node.js, интегрированное с приложением PHP

У меня есть стороннее PHP веб-приложение (ELGG), которое я хотел бы расширить с помощью приложения Node.js. Пользователи проходят проверку подлинности в приложении PHP путем проверки предоставленных учетных данных в базе данных MySQL.

Как я могу защитить доступ к приложению Node.js без необходимости переписывать код аутентификации в Node? Есть ли способ разрешить пользователям доступ к приложению Node.js, только если они вошли в приложение PHP?

2

Решение

Используйте PHP и Node с общей БД для подтверждения сеанса
Вы можете использовать БД или какой-либо другой общий репозиторий для хранения идентификатора сеанса пользователя, который Узел может проверить, чтобы убедиться, что пользователь вошел в систему.

1

Другие решения

Я думаю, что лучший способ приблизиться к этому — использовать приложения PHP и Node в качестве поддоменов одного корневого домена, а затем проверить приложение Node на наличие файла cookie для проверки подлинности приложения PHP. Это позволит избежать дополнительного вызова базы данных в ответе Ирвина.

Когда пользователь входит в приложение PHP, для phpapp.mydomain.com (* .mydomain.com) создается Cookie с токеном аутентификации. Приложение Node, размещенное на nodeapp.mydomain.com, может получить доступ к токену авторизации cookie, созданному на phpapp.mydomain.com.

1

В общем, вы должны сделать приложение Node.js веб-сервисом, сделать его доступным локально, а не публично, затем написать PHP-код, который выполняет аутентификацию, затем вызвать API, предоставленный Node.js, и затем с помощью этого конструировать ответ для пользователя. данные.

0

Я написал плагин Elgg, который обеспечивает функциональность для доступа к серверу node.js для websocket. Вы можете проверить код здесь: Elgg-nodejs

Я просто анализирую куки, чтобы получить пользователя сессии:

getElggSession = function(socket) {
return socket.handshake.headers.cookie.match(/Elgg=(\S*);?/)[1];
};

Может быть, это не лучший метод для безопасности …

0
По вопросам рекламы [email protected]