Ответ 1
Чтобы исправить проблему цикла, вы должны переопределить AuthorizeAttribute
.
По умолчанию MVC возвращает 401 Unauthorized, когда роли пользователя не соответствуют требованиям AuthorizeAttribute
. Это инициализирует запрос на повторную аутентификацию для провайдера идентификации. Поскольку пользователь уже вошел в систему, AAD возвращается на ту же страницу, которая затем выдает еще 401, создавая цикл перенаправления. Здесь мы переопределяем метод AuthorizeAttribute HandleUnauthorizedRequest, чтобы показать что-то, что имеет смысл в контексте нашего приложения.
Этот класс был создан при создании нового проекта MVC с использованием VS 2015:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
//One Strategy:
//filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
//Another Strategy:
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
{
controller = "Error",
action = "ShowError",
errorMessage = "You do not have sufficient priviliges to view this page."
})
);
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}