Как вы можете "закопать" определенный компьютер за брандмауэром, используя HttpContext?

Мне нужно иметь возможность идентифицировать одну систему из другой в ASP.Net, используя все, что доступно в HttpContext. Я пытался использовать многие из доступных ServerVariables, но часто системы настраиваются с диска, созданного из образа. Итак, из-за брандмауэра их IP-адрес одинаков и все их ServerVariables (browseragent, logonuser) одинаковы, мне нужно найти что-то еще, что будет отличать разные машины. Поскольку сайт защищен проверкой подлинности с помощью форм, необходимо отключить встроенную проверку подлинности Windows (в противном случае у меня был бы доступ к различным значениям Logon_User).

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

EDIT / UPDATE:

@Robert Harvey предоставил пару ссылок для поиска, которые принесли много результатов, большинство из которых не соответствуют моему счету по той или иной причине (хотя есть еще несколько отличных идей, о которых я даже не думал до). Прежде всего мне нужно уметь определить, переключал ли кто-нибудь машины за брандмауэром. Поэтому я предоставлю некоторые детали структуры кода, которые пролят свет на то, почему некоторые вещи не работают для меня.

  1. Сессии / файлы cookie сохраняются до полуночи (решение, принятое мной над головой, я живу с этим)
  2. Аутентифицированный пользователь не использует класс MembershipUser. (даже если это произойдет, MembershipUser.IsOnline не предложит мне ничего, кроме ранее зарегистрированного пользователя)
  3. Известно, что пользователи удаляют куки или закрывают браузеры без выхода из системы.
  4. Мне нужны некоторые критерии, которые могут отличить одну машину от другой, не обязательно для предотвращения одновременных входов в систему, но, по крайней мере, для их идентификации.

2 ответа

Решение

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

Создавайте guid при входе в систему и сохраняйте его в файле cookie и в соответствии с записью пользователя в базе данных.

Сравните это при каждом запросе, если он не совпадает, у вас есть одновременный вход в систему.

Чтобы быть понятным, этот cookie-файл является сеансовым cookie-файлом, таким как проверка подлинности форм, если они удалят его, они все равно будут отключены.

Другие вопросы по тегам