Вопрос

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

то естьКогда пользователь с правами администратора нажимает кнопку выхода из системы и URL-адрес возврата на страницу с ограниченным доступом передается в login.aspx, тогда другой пользователь без прав администратора пытается войти в систему, и он перенаправляется обратно на страницу входа.

Я столкнулся с этим решение но я не могу изменить имя login.aspx на обработчик http, и функция isauthenticated, похоже, не работает на странице aspx с аутентификацией без файлов cookie, поскольку билет аутентификации форм, похоже, удаляется из URL-адреса при перенаправлении обратно на вход в систему страница.

РЕДАКТИРОВАТЬ:

Поскольку это приложение уже находится в разработке, я не могу изменить поток страниц процесса входа/выхода/тайм-аута или переименовать страницу входа.

Это было полезно?

Решение

Проверьте, имеет ли пользователь право доступа к странице в returnUrl после входа на страницу login.aspx.Вы можете использовать этот метод UrlAuthorizationModule (или собственный, если он вам больше подходит):

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(

     returnUrl,
     userPrincipal, 
     GET");

Если пользователь не авторизован, просто перенаправьте его на страницу, к которой у пользователя есть доступ.

Чтобы получить принципала пользователя:

var roles = System.Web.Security.Roles.GetRolesForUser(username);

var principal = new System.Security.Principal.GenericPrincipal(

   new System.Security.Principal.GenericIdentity(username), 

   roles

);

Другие советы

У нас была похожая проблема, и я исправил ее, выполнив следующие действия:

If "LogOut".Equals(e.CommandName) Then
    FormsAuthentication.SignOut()
    Response.Redirect("~/Login.aspx")
End If

Затем в Login.aspx мы меняем PostBackUrl на Login.aspx, если он содержит параметр ReturnUrl, который отправляет пользователя обратно в Login.aspx.

Несколько вариантов...

Во-первых, вручную перенаправить обратно на Login.aspx, когда пользователь вышел из системы, чтобы не было ReturnURL.Сделайте метаобновление на своих страницах, соответствующее тайм-ауту сеанса, чтобы пользователь не нажимал на ресурсы, к которым он внезапно не может получить доступ.

Во-вторых, всегда выходите из системы в Page_Load файла Login.aspx.Эй, почему бы и нет?Я могу придумать несколько причин, но, возможно, они не применимы к вашей ситуации.

В-третьих, игнорируйте ReturnURL.Вам не нужно вызывать RedirectFromLoginPage!Перенаправить пользователя на целевую страницу по умолчанию при входе в систему.

Не могли бы вы изменить последовательность страниц?

Я имею в виду, что вместо перенаправления обратно на страницу login.aspx, когда у пользователя нет доступа к ресурсу, перенаправляет его на информационную страницу.

На этой странице объясняются причины перенаправления и предлагаются такие варианты, как:

1. Click here to login as another user.
2. Click here to request access to the page.
3. Click here to login again, if your session has expired.

Это устранит циклическую ссылку и, следовательно, проблему.

Как насчет добавления модуля HTTP, который проверяет, является ли запрос. UrlReferRer является страницей входа в систему, и, если это так, проверяет, если они разрешены для доступа к запросу. страница.

Хотя вы говорите, что не можете изменить имя login.aspx на обработчик HTTP, пробовали ли вы добавить перенаправление HTTP 301, чтобы при каждом запросе login.aspx сервер перенаправлял пользователя на обработчик HTTP, например.логин.ashx?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top