Перво-наперво: это только образец. Вопрос не в том, является ли это действительным способом аутентификации.
По сути, я получаю странное поведение, которое зависит от используемого браузера. В Firefox все работает, как и ожидалось, но в IE рассматриваемые действия контроллера по-прежнему выполняются даже при сбое авторизации.
У меня настроен тестовый сайт ASP.NET MVC, где класс SecureController наследуется от стандартного класса Controller со следующим соответствующим кодом:
[AuthorizeByToken]
public class SecureController : Contrller
protected override void OnAuthorization(AuthorizationContext filterContext)
{
// Check for presence of encoded session string
if (filterContext == null) throw new ArgumentNullException("filterContext null");
if (filterContext.HttpContext == null) throw new ArgumentNullException("httpContext null");
if (filterContext.HttpContext.Request["TestToken"] == null) return;
// Complete authorization
FormsAuthentication.SetAuthCookie(csmSession.CSMUser.userName, true);
base.OnAuthorization(filterContext);
}
Существует также атрибут AuthorizeByTokenAttribute, основанный на AuthorizeAttribute, например:
public class AuthorizeByTokenAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/");
filterContext.ActionDescriptor = null;
base.HandleUnauthorizedRequest(filterContext);
}
}
Теперь, когда вы, например, посещаете http://testsite/TestSecureController/Index, он работает, как и ожидалось, в Firefox. Он входит в код авторизации, дает сбой и перенаправляет в корень. В IE он входит в код авторизации, по-прежнему происходит сбой, и следующим шагом является выполнение действия Index () TestSecureController.
Может кто-нибудь предложить некоторое понимание того, почему что-то подобное зависит от браузера?