Требования к модальной аутентификации (как iFrame страницы входа или объекта) без перенаправления на страницу входа?

Здесь может возникнуть несколько вопросов, но один главный вопрос… что следует реализовать, если мы заставим работать модальную аутентификацию? Попробую объяснить..

Текущая среда:
ASP.NET с .NET 4.0 с проверкой подлинности с помощью форм.

Наши клиенты, которые используют наше лабораторное программное обеспечение, должны быть особенно осторожны, если другой пользователь получит контроль над их компьютером, поэтому мы не можем реализовать постоянные тайм-ауты (я думаю, что в последний раз, когда я читал, вы можете продолжать продлевать тайм-аут, пока что-то происходит) в ASP.NET, верно?). Несмотря на то, что у нас есть аутентификация по паролю во всем нашем лабораторном многофункциональном клиентском приложении, мы по-прежнему не хотим, чтобы случайный человек, проходящий мимо рабочего стола некоторых сотрудников, увидел, над чем они работают, и что-то было скомпрометировано. Так что я думал об этом в течение довольно долгого времени, и сегодня вечером у меня было прозрение. Что, если бы у нас была всплывающая страница входа в модальном диалоговом окне внутри iframe (или тега объекта) в модальном div, который находится внутри нашей мастер-страницы? Как мы можем предотвратить истечение срока их сеанса, но потребовать от них входа в систему после истечения времени сеанса? Есть ли что-то еще, что, по вашему мнению, потребуется, если мы реализуем что-то подобное, чтобы это работало? Обратите внимание, что у нас есть переменные сеанса в программном обеспечении, которые нельзя сбросить, если это произойдет. Как мы можем сохранить их постоянными, но при этом заставить это работать? Главное, я хочу, чтобы они не перенаправлялись на страницу входа. Это довольно раздражает конечных пользователей. По закону им нужно установить тайм-аут на 2 минуты, поэтому я подумал, что это будет действительно круто, если я смогу заставить его работать. Есть еще какие-то вещи, на которые нам нужно обратить внимание??


person MacGyver    schedule 26.01.2012    source источник


Ответы (1)


Я не могу не думать, что страшно использовать сессию asp.net, особенно с формами-авторизацией - потому что пользователь получает 2 куки: сессию и авторизацию. Представьте, что произойдет, если аутентифицированный пользователь A каким-то образом украдет cookie сеанса у аутентифицированного пользователя B: это приведет к тому, что пользователь A получит доступ ко всем данным, которыми владеет пользователь B (если только ваш код не проверяет, владеет ли идентификатор пользователя из auth-cookie объект сеанса, Другими словами, я бы предложил избавиться от сеанса или, по крайней мере, добавить значение идентификатора пользователя в объект сеанса и убедиться, что вы проверяете, что идентификатор пользователя из auth-cookie совпадает с идентификатором в событии application_authorize, возможно. не просил эту информацию, но я думаю, что это уместно, несмотря ни на что.

Поскольку сеанс и файлы cookie авторизации имеют мало общего друг с другом, что касается браузера, и ваша цель состоит в том, чтобы поддерживать сеанс в рабочем состоянии, в то время как срок действия файла cookie аутентификации должен истечь, тогда вы можете решить эту проблему, написав кусок JS (подсказка: window.setInterval), который регулярно пингует некоторые АНОНИМНЫЕ URL-адреса (страницы aspx) на вашем сервере (убедитесь, что вы добавили к этим запросам случайный запрос, например new Date().getTime()). Страница anon aspx должна будет прочитать (не записывать!) какое-то значение из сеанса (или просто получить объект сеанса) - просто для того, чтобы поддерживать его в рабочем состоянии (может быть, это на самом деле не нужно; поэкспериментируйте), но браузер БУДЕТ отправляйте файлы cookie сеанса asp.net с этими запросами, поэтому таким образом вы можете сохранить объект сеанса навсегда.

С другой стороны, ваш авторизационный файл cookie истечет. Однако вы ДОЛЖНЫ установить настройки web.config (аутентификация> формы), чтобы НЕ использовать скользящее истечение срока действия (поскольку этот режим существенно продлевает срок действия / истечения срока действия файла cookie аутентификации на другие минуты, независимо от времени ожидания). Затем вы можете быть уверены, что после истечения срока действия файла cookie (например, через 20 минут), когда пользователь нажимает на защищенную ссылку (ну, на ссылку, ведущую на защищенную страницу; неанонимную страницу), он попадет при входе в систему. страница. Я знаю, что ты не хочешь этого. Итак, чтобы решить эту проблему, добавьте еще один (независимый) фрагмент javascript (подсказка: window.setTimeout([code], 2 * 60 * 1000) // to fire after 2 min since the page-load), чтобы запустить диалоговое окно входа в систему. Диалоговое окно входа в систему расширило бы auth-cookie, опубликовав uid/pwd и позволив asp.net проверить его.

Еще одно: если на этой странице происходит ajax, вы должны подумать о сбросе этих тайм-аутов js обратно на 0 (или об отмене, а затем повторной инициализации событий интервала и тайм-аута). Другими словами, вы не можете начать измерять неактивность с момента загрузки страницы — вы должны сбрасывать счетчик неактивности при каждом действии пользователя (клике или, по крайней мере, при каждом обратном вызове ajax).

То, что я предлагаю здесь, может быть излишеством. Я бы, наверное, попытался решить это по-другому. Я бы попытался удалить сеанс в процессе из изображения и перезагрузить его на основе идентификатора пользователя auth-cookie из любого места, где бы ни находились пользовательские данные, каждый раз, когда это необходимо (или один раз для каждого запроса). Я не знаю, почему так важно держать объект сеанса висящим в памяти, даже когда пользователь вышел из системы (откуда вы знаете, что они не уйдут в течение недели; сохранение сеансов в живых убило бы ваш сервер, если бы вы большое количество пользователей). Возможно, хранить данные сеанса в базе данных или каком-либо другом механизме кэширования в сети (например, memcached) и извлекать их один раз для каждого запроса (например, в application_authorize), сохранять их в request.context (чтобы исключить многократное извлечение из нескольких мест). Затем срок действия вашего файла cookie для авторизации истечет, и используйте JS для открытия диалогового окна входа в систему за несколько минут до истечения срока действия файла cookie для аутентификации (чтобы избежать пробела, когда пользователь попадет на страницу входа в систему, если он нажмет на ссылку, если вы заботитесь об этом четное).

Я надеюсь, что эти идеи помогут.

person Community    schedule 26.01.2012