Другой браузер означает другой клиент с одной машины - PullRequest
2 голосов
/ 24 февраля 2012
  1. Если я открою новую вкладку (или окно) того же браузера, над которым я работаю (скажем, Firefox), сервер будет рассматривать его как тот же клиент.

  2. Но если я открою тот же URL-адрес из другого браузера (скажем, IE), то сервер не сможет идентифицировать его как тот же клиент.

Итак, как сервер идентифицирует клиента внутри?

Если я хочу, чтобы сервер однозначно идентифицировал клиента даже из другого браузера (и не рассматривал его как нового клиента), как мне это сделать с веб-сервера (используя сервлеты)?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

«Если я открою новую вкладку (или окно) того же браузера, над которым я работаю (скажем, Firefox)»

Ваша предпосылка не точна.

Если я использую другой профиль того же браузера (FireFox или Chrome и т. Д.), Это будет считаться другим сеансом.

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

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

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

Ваше время будет лучше потрачено на принятые в отрасли и распространенные практики.

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

Поэтому ответ на ваш вопрос - аутентификация пользователя.

Вы не должны иметь дело с обходом сервера для распознавания одного и того же идентификатора сеанса на нескольких компьютерах или в «сеансах» браузера. Становится проволочным, волосатым и пышным.

Не изобретай велосипед. Используйте OpenID или OAuth2.

OpenID-потребитель очень прост в реализации. Как бы просто это ни было, литературных примеров реализации openID не так много. Но Google выложил достаточное количество полезной литературы по OAuth.

Google Federated login / OAuth также довольно забавный и простой в реализации. Даже с GWT.

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

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

2 голосов
/ 24 февраля 2012

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

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