Как проверить, есть ли у пользователя логин в веб-приложении? - PullRequest
1 голос
/ 06 мая 2010

Я хочу узнать все подробности аутентификации веб-приложения. Итак, я решил написать библиотеку аутентификации CodeIgniter с нуля. Теперь мне нужно принять решение о том, как определить, является ли один пользователь логином.

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

Я могу представить, что самый простой способ - сохранить значение cookie в статусе сеанса. Для каждого HTTP-запроса сравните значение из cookie и значение из сеанса сервера. (Поскольку библиотека сеансов CodeIgniter хранит переменные сеансов в файлах cookie, она не применима без некоторых настроек.) Этот метод требует хранения на стороне сервера.

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

Я попробовал Google. Я захожу в Google через азиатский прокси, который должен направлять меня в центры обработки данных в Азии. Затем я переключаюсь на прокси-сервер в Северной Америке, который должен направить меня в центры обработки данных в Северной Америке. Он распознает мой логин без повторного ввода имени пользователя и пароля.

Итак, есть ли способ определить, является ли пользователь логином без статуса сеанса на стороне сервера?

Ответы [ 4 ]

1 голос
/ 06 мая 2010

Полезные ресурсы:

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

  • этот вопрос SO касается репликации mySQL.

Это всего лишь одна из многих проблем, возникающих при работе на нескольких серверах с PHP-решением - я уверен, что есть еще что-то, что можно найти по теме в поиске SO.

Кроме того, рассмотрите ошибку сервера.

1 голос
/ 06 мая 2010

Предполагается, что пользователь аутентифицирован просто , потому что нечто, похожее на файл cookie сеанса, очень плохая идея. Кроме того, ваш код станет очень запутанным, когда вы начнете пытаться измерить факты о сеансе без предварительного вызова session_start (). Лучшее решение - сохранить факт аутентификации пользователя (и, возможно, часть информации об авторизации) в самой сессии, например

 session_start();
 if (!$_SESSION['auth_user']) {
    if ($_POST['username'] && $_POST['password'] 
       && check_valid($_POST['username'],$_POST['password']) {
          $_SESSION['auth_user']=$_POST['username'];
       } else {
          // user is not logged in
          header('Location: /login.php');
          print 'You are not logged in';
          exit;
       }
 }

С

1 голос
/ 06 мая 2010

Нет, это невозможно.
Эти центры обработки данных не изолированы друг от друга, а взаимосвязаны.
Это распределенное, но твердое «внешнее хранилище, такое как база данных»

Междоменная авторизация - это другой вопрос, но его также легко достичь.

Какая польза от такой информации - просто тот факт, что пользователь вошел в систему, без каких-либо пользовательских параметров, учетных данных - что-нибудь? Почему без базы данных на стороне сервера?

0 голосов
/ 17 ноября 2013

Итак, есть ли способ определить, является ли пользователь логином без статуса сеанса на стороне сервера?

Да, есть. Сервер должен установить cookie с зашифрованным идентификатором пользователя (и, возможно, другими данными). Если все серверы совместно используют ключ, то они также знают, как расшифровать этот файл cookie, и, таким образом, могут независимо аутентифицировать пользователя. Если файл cookie также содержит незашифрованный идентификатор пользователя, то вы можете использовать пользовательскую функцию одностороннего шифрования (также называемую хешем с солью или MAC ), чтобы проверить, действителен ли он. Если вы действительно заботитесь о безопасности, вы можете зашифровать больше данных, например, IP-адрес, срок действия и т. Д. При желании вы также можете использовать асимметричное шифрование с открытыми и закрытыми ключами и / или цифровой подписью.

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