MVC 4 SimpleMembership在本地工作正常,但在实时服务器上导致401

时间:2013-11-18 20:14:48

标签: asp.net-mvc-4 authentication iis simplemembership

我有一个使用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}}中确定的[授权]属性的控制器的部分内容。

2 个答案:

答案 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);
    }

最终的人为错误:(