Asp.net формирует петлю авторизации - PullRequest
7 голосов
/ 12 февраля 2009

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

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

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

EDIT:

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

Ответы [ 6 ]

2 голосов
/ 19 февраля 2009

Проверьте, авторизован ли пользователь для доступа к странице в 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

);
1 голос
/ 18 февраля 2009

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

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

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

1 голос
/ 15 февраля 2009

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

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

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

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

0 голосов
/ 20 февраля 2009

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

0 голосов
/ 20 февраля 2009

Как насчет добавления модуля http, который проверяет, является ли Request.UrlReferrer страницей входа в систему, и если это так, проверяет, авторизованы ли они для доступа к Request.Url и, если нет, перенаправляет их на «У вас нет прав для просмотра этой страницы «. стр.

0 голосов
/ 15 февраля 2009

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

Я имею в виду, что вместо того, чтобы перенаправлять обратно на страницу 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.

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

...