我在我的 mvc 3 应用程序中使用 Windows 身份验证,通常一切正常。但是,如果我离开某个页面大约 2 分钟,然后发出 ajax 请求,User.Identity.Name(在控制器中)返回空白,身份验证类型也是如此。当我检查 user.isinrole(whatever) 时,这会导致失败。通常清除缓存会解决问题,但不是定期刷新。有时我需要清除几次缓存。
我正在使用 chrome,当我在 IE 中尝试时没有注意到这个错误(我没有尝试过比在 chrome 中等待的时间更长),那么这个错误是否可能与 chrome 相关?编辑:它也发生在 Firefox 中。
我注意到失败的时间类似于User.Identity.Name 中的问题,Windows 身份验证有时为空白, 但我在 web.config 中没有看到任何关于匿名身份验证的信息
一段时间后,在user.identity.name 中变为空白,问题似乎是在他们的 IIS 服务器上启用了匿名身份验证,我也有,但我希望在我的服务器上设置它。有一些页面需要匿名访问,所以认证都是由MVC而不是服务器强制执行的,所以IIS启用了匿名和windows认证
我的 system.web 标记中有身份验证模式 =“Windows”,而 web.config 中没有关于授权的内容。在 global.asax.cs 的 registerglobals 函数中,我有
filters.Add(new RequireWindowsAuth());
这是一个继承自 AuthorizeAttribute 的类,它重写 OnAuthorization 方法以执行类似以下的操作
if(!User.IsInRole("Admin") && AdminAttr is defined)
filterContext.Result = new HttpStatusCodeResult(403, "You are not authorized to view this page");
else if(AllowAnonymousAttribute is not found)
base.OnAuthorization(filterContext);
当错误发生时,我从服务器得到确切的 403 响应。
请求的操作具有 admin attr 而不是在其上定义的 allowanonymous attr
这是我检查正在定义的 attrs 的方法
filterContext.ActionDescriptor.IsDefined(attr, true) || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AdminAttribute), true)