Петля перенаправления входа в ASP.NET, когда пользователь не в роли
Я немного связан с реализацией ролей в ASP.NET MVC 5. Я пытаюсь войти в систему как пользователь, у которого нет роли, необходимой для доступа к области приложения, к которой я пытаюсь получить доступ. В этом сценарии я бы ожидал, что меня снова перенаправят на страницу входа в систему, и будет до тех пор, пока я не введу набор учетных данных, у которых есть доступ, или не перейду в другую область приложения.
На самом деле происходит то, что приложение, похоже, входит в цикл перенаправления входа в систему, отладка показывает, что действие входа в систему вызывается несколько раз.
Вот действие по входу в систему:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
Это приводит к ошибке, сгенерированной IIS:
HTTP Error 404.15 - Not Found
The request filtering module is configured to deny a request where the query string is too long.
Строка запроса выглядит следующим образом:
http://localhost/MyApplication/Account/Login?ReturnUrl=%2FMyApplication%2FAccount%2FLogin%3FReturnUrl%3D%252FMyApplication%252FAccount%252FLogin%253FReturnUrl%253D%25252FMyApplication%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FMyApplication%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FMyApplication%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FMyApplication%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FMyApplication%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525252FMyApplication%252525252525252FAccount%252525252525252FLogin%252525252525253FReturnUrl%252525252525253D%25252525252525252FMyApplication%25252525252525252FAccount%25252525252525252FLogin%25252525252525253FReturnUrl%25252525252525253D%2525252525252525252FMyApplication%2525252525252525252FAccount%2525252525252525252FLogin%2525252525252525253FReturnUrl%2525252525252525253D%252525252525252525252FMyApplication%252525252525252525252FAccount%252525252525252525252FLogin%252525252525252525253FReturnUrl%252525252525252525253D%25252525252525252525252FMyApplication%25252525252525252525252FAccount%25252525252525252525252FLogin%25252525252525252525253FReturnUrl%25252525252525252525253D%2525252525252525252525252FMyApplication%2525252525252525252525252FAccount%2525252525252525252525252FLogin%2525252525252525252525253FReturnUrl%2525252525252525252525253D%252525252525252525252525252FMyApplication%252525252525252525252525252FAccount%252525252525252525252525252FLogin%252525252525252525252525253FReturnUrl%252525252525252525252525253D%25252525252525252525252525252FMyApplication%25252525252525252525252525252FAccount%25252525252525252525252525252FLogin%25252525252525252525252525253FReturnUrl%25252525252525252525252525253D%2525252525252525252525252525252FMyApplication%2525252525252525252525252525252FAccount%2525252525252525252525252525252FLogin%2525252525252525252525252525253FReturnUrl%2525252525252525252525252525253D%252525252525252525252525252525252FMyApplication%252525252525252525252525252525252F
Единственное изменение, которое я сделал, перейдя от рабочего решения (хотя и без авторизации на основе ролей) к моей текущей неработающей ситуации - добавление следующего над контроллером, на который я перенаправлен при успешном входе в систему:
[Authorize(Roles = "Staff")]
Как я уже говорил ранее, пользователь, под которым я вхожу, не входит в эту роль, но я бы ожидал нормального однократного перенаправления в Login без зацикливания.
Редактировать: запрошенный bu @dima, детали авторизации применяются через фильтры ... У меня есть следующее:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
}
}
Тем не менее, я протестировал приложение с и без этой строки, и цикл перенаправления продолжается без изменений.