gpt4 book ai didi

asp.net-mvc - ASP.NET MVC Authorize 属性在 IE 和 FireFox 中的行为不同

转载 作者:行者123 更新时间:2023-12-01 15:08:38 25 4
gpt4 key购买 nike

首先要做的是:这只是一个示例。这不是关于这是否是进行身份验证的有效方式的问题。

基本上,我的行为很奇怪,这取决于所使用的浏览器。在 Firefox 中一切都按预期工作,但在 IE 上,即使授权失败,相关 Controller 操作仍会触发。

我设置了一个 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() 操作。

谁能提供一些见解来解释为什么像这样的东西会依赖于浏览器?

最佳答案

我使用几种不同的方法测试了您的 Uri 路由方案,并消除了这个问题。这在两种浏览器中都有效。我对这类事情非常偏执。

因此,我倾向于认为是 cookie 行为或状态在您的两个浏览器实例中有所不同。尝试以下操作:

  1. 尝试使用 IE8/IE9 中的 InPrivate session 对您的表单进行授权 - 这是一个无 cookie session ,应该会失败并出现正常的失败后路由行为。我们试图通过此测试消除的是您在 IE session 中有脏 cookie 而在 Firefox 中有干净 cookie 的可能性。如果此测试成功,请继续执行第 2 步。如果失败,请参阅第 3 步。
  2. 尝试使用您的标准 IE 实例对您的 Controller 进行授权;如果失败,请删除所有 cookie,然后重试。如果失败,请参阅第 3 步。
  3. 如果这两个测试都失败了,那么我们需要检查 Firefox 和 IE 中的 cookie 是否相同。您可以尝试使用类似 http://ncookiereader.sourceforge.net/ 的东西比较您的站点在 Firefox 和 IE 中发出的 cookie,但打开 cookie 集合并在 Notepad++ 中区分它们可能更简单。您的 cookie 的内容将被加密,它们可能包含不同的身份验证票证,这可能是因为您在两个不同的 IIS session 上运行,所以为了让生活更轻松仅用于调试目的我建议启用解密作为一个选项,因此您可以在 Web.config 中使用此代码段以明文形式查看您的 cookie:<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880" protection="None" />
    </authentication>
    - 如果您的 cookie 的内容与授权票证不同,请转到 http://aaronstannard.com/并通过联系表向我发送电子邮件。如果您的 cookie 的内容相同,请继续执行第 4 步。
  4. 此时,我将开始在您的授权过滤器中寻找未处理的异常,并且我将使用 Wireshark 查看 IE 和 Firefox 发送的 HTTP 请求是否有任何主要差异。如果您有任何发现,请告诉我们。

关于asp.net-mvc - ASP.NET MVC Authorize 属性在 IE 和 FireFox 中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4426279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com