Требования к модальной аутентификации (как к странице входа в iFrame или объекту) без перенаправления на страницу входа? - PullRequest
0 голосов
/ 26 января 2012

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

Текущая среда:
ASP.NET с .NET 4.0 с аутентификацией форм

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

1 Ответ

1 голос
/ 26 января 2012

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

Поскольку сеанс и файлы cookie аутентификации имеют мало общего между браузером, и ваша цель состоит в том, чтобы поддерживать сеанс в действии, в то время как срок действия файла cookie аутентификации должен истечь, тогда вы можете решить это, написание фрагмента JS (подсказка: window.setInterval), который регулярно пингует некоторый ANONYMOUS 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 timeout обратно в 0 (или об отмене, а затем повторной инициализации интервала и событий timeout). Другими словами, вы не можете начать измерять неактивность с момента загрузки страницы - вы должны сбрасывать счетчик неактивности при каждом действии пользователя (щелчок; или, по крайней мере, при каждом обратном вызове ajax).

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

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

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