首先要做的事情是:这只是一个样本。这不是一个问题,这是否是一种有效的身份验证方式。
基本上,我的奇怪行为取决于所使用的浏览器。在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);
}
还有一个基于AuthorizeAttribute的AuthorizeByTokenAttribute属性,如下所示:
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中它进入授权代码,仍然失败,下一步是TestSecureController的Index()动作正在运行。
任何人都可以提供一些有关此类内容与浏览器相关的原因吗?
答案 0 :(得分:3)
我使用几种不同的方法测试了您的Uri路由方案,并将其作为一个问题排除在外。这在两个浏览器中都是等效的。我对这种事情极其偏执。
因此,我倾向于认为它的cookie行为或状态因两个浏览器实例而异。请尝试以下方法:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" protection="None" />
</authentication>
- 如果您的Cookie内容与授权凭证不同,请转到http://aaronstannard.com/并发送给我通过联系表格发送电子邮件。如果您的cookie内容相同,请继续执行步骤4.