我有一个使用Simple Membership的MVC 4应用程序。在本地,在开发框(IIS Express)上它工作正常。如果我尝试访问使用[Authorize]属性修饰的控制器操作,我将返回到web.config中指定的登录页面。
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
登录操作已正确修饰:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
...
}
在实时服务器上,当我尝试访问使用[Authorize]属性修饰的控制器方法时,我确实会被定向到/ Account / Login页面,但我也会看到错误:
401 - 未经授权:由于凭据无效,访问被拒绝。
IIS站点身份验证配置确实启用了匿名和表单身份验证。应用程序池以“网络服务”身份运行,并将“加载用户配置文件”设置为True,以便使用用于身份验证的IIS本地数据库。
为什么我应该获得401?
更新1
我可以确认我的_layout页面没有调用任何其他标有[{3}}中确定的[授权]属性的控制器的部分内容。
答案 0 :(得分:0)
您可能需要允许访问网址
<location path="Account/Login">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
答案 1 :(得分:0)
好的,我向后剥离了这个问题,发现问题确实是由于登录页面上的部分视图引用,原始MVC 4 Internet应用程序项目模板遗留下来。
@Html.Action("ExternalLoginsList", new { ReturnUrl = ViewBag.ReturnUrl })
这个局部视图确实利用了我无意中用[Authorize]属性修饰的控制器动作。
[Authorize(Users = "support,admin")]
[ChildActionOnly]
public ActionResult ExternalLoginsList(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return PartialView("_ExternalLoginsListPartial", OAuthWebSecurity.RegisteredClientData);
}
最终的人为错误:(