Я в ситуации, когда мой клиент хотел бы двухфакторную аутентификацию (например, войти в систему и получить электронную почту с URL-адресом доступа) в соответствии со следующими правилами:
Наша главная проблема в том, что сложно понять, откуда пришел пользователь. Причиной этого является ISA-сервер спереди, который в основном удаляет всю информацию о клиенте. Информация, полученная на ISS, где выполняется приложение, возвращает адрес сервера ISA в информации CLIENT_IP.
Итак - как мы можем определить, откуда пришел пользователь, когда весь трафик проходит через один и тот же ISA-сервер?
Одно из решений заключалось в создании ресурса, доступного только из LAN, и в основном заявлении: «Если вы не можете получить доступ к этому ресурсу, вы де-факто не находитесь в LAN». Однако - это опять же может повлиять на тайм-ауты - например, «попробуйте найти ресурс, но время ожидания истечет через 3 секунды». Это может замедлить работу приложения, и у нас может возникнуть проблема, поскольку несколько сотрудников работают из других частей мира, где линии плохие, когда дело доходит до доступа к производственным серверам (например, люди в локальной сети, обращающиеся к серверам по фиксированной линии, могут испытывать не доходят до ресурса, даже если они действительно находятся в локальной сети).
Я задал этот вопрос и о stackoverflow, но решение как бы зависло, когда мы узнали, что сервер ISA удалил всю информацию.
(Я предполагаю, что эта статья резюмирует источник моей проблемы: http://www.redline-software.com/eng/support/articles/isaserver/security/x-forwarded-isa-track.php)
Мы закончили создание механизма, который будет выдавать зашифрованный секрет клиенту, когда он находится в локальной сети. Если этот секрет недоступен с клиентской машины, он де-факто находится вне локальной сети. Мы видим, что в нем есть дыры, но мы сосредоточимся на надежном шифровании и коротком сроке службы, чтобы снизить риски.