Как я могу аутентифицировать сеанс пользователя на разных серверах? - PullRequest
3 голосов
/ 23 июня 2009

Проблема: ссылка для скачивания должна отображаться на домашней странице пользователя. Эта ссылка для скачивания должна быть ТОЛЬКО доступна, если пользователь вошел в систему.

Но настоящая проблема в том, что домашняя страница пользователя и ссылка для скачивания находятся на отдельных веб-серверах.

Можно ли как-нибудь отправить токен со ссылкой на скачивание и проверить его там?

Ответы [ 3 ]

1 голос
/ 23 июня 2009
users server = serverA.com
your server  = serverB.org

Если я правильно понимаю, проблема в том, что пользователь вошел в систему только на сервере A, но не на сервере B, и нет способа поделиться состоянием сеанса (например, обработка сеанса в базе данных)? *

от макушки головы, я могу придумать один вариант:

сервер B просто запрашивает сервер A
означает: ссылка на сервере А содержит идентификатор сессии пользователя *. Затем serverB спрашивает сервер A, является ли сеанс действительным.

Вы не можете сделать это без связи между этими двумя серверами.

* примечание: вместо идентификатора сеанса было бы лучше использовать случайный токен. идентификаторы сессии не должны быть частными.

, который не помешает вашим пользователям поделиться URL, поэтому, если они хотят, чтобы кто-то еще скачал файл, они могут просто передать URL. с другой стороны, злоумышленник также может сделать это со своим идентификатором сеанса.

1 голос
/ 24 июня 2009

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

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

Наконец, вы можете настроить веб-сервис на первом сервере, который будет возвращать ответ «да / нет» при задании имени пользователя, проверяя статус пользователя, вошедшего в систему. Получающая ссылка на втором сервере затем получит имя пользователя и проверит состояние входа в систему, прежде чем создавать ответ.

0 голосов
/ 23 июня 2009

Если пользователь щелкает ссылку, он переходит со своего сервера на ваш сервер.

И если он вошел в систему на вашем сервере, то вы можете делать любые проверки, которые вам нужны, поскольку он пытается получить доступ к файлу на вашем сервере. Даже если ссылка отображается на другом сервере.

То есть, если вы используете сеансы для входа пользователя в систему, в коде загрузки должно быть достаточно для запуска сеанса с session_start(), и пользователь должен войти в сеанс, который он уже имеет.

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