【问题标题】:Why is AllowAnonymous not working while deployed to Azure Websites?为什么 AllowAnonymous 在部署到 Azure 网站时不起作用?
【发布时间】:2013-07-02 15:39:42
【问题描述】:

我有一个带有以下控制器的 MVC4 Web 应用程序

[Authorize]
public class AccountController : BaseController
{
  [AllowAnonymous]
  public ActionResult SignInRegister(LoginModel loginModel, string returnUrl)
  {
    //some implementation
  }
  //other secured actions
}

这在本地运行时按预期工作,但一旦我将其部署到免费 Azure 网站,我就会收到 401 错误代码和消息:You do not have permission to view this directory or page.

删除[Authorize] 属性并重新部署按预期工作,再次添加它并重新部署会带来问题。

我什至尝试了完全限定的类名:System.Web.Mvc.AuthorizeSystem.Web.Mvc.AllowAnonymous,结果相同。

应用使用 .NET 4.5,Azure 网站也配置为使用 4.5。

更新: BaseController 有一个动作,它以未使用[AllowAnonymous] 修饰的局部视图返回标题。在本地,它导致页面显示没有标题,但在 Azure 网站上,响应被切断,只返回上面提到的错误消息。在我特意查看之前,我没有意识到标题丢失了。

现在要问的问题是:为什么 Azure 网站会覆盖响应?

【问题讨论】:

  • 您应该发布您的更新作为答案。

标签: asp.net-mvc asp.net-mvc-4 authorization


【解决方案1】:

BaseController 有一个动作,它以未使用 [AllowAnonymous] 修饰的局部视图返回 Header。在本地,它导致页面显示没有标题,但在 Azure 网站上,响应被切断,只返回上面提到的错误消息。在我特意查看之前,我没有意识到标题丢失了。

现在要问的问题是:为什么 Azure 网站会覆盖响应?

【讨论】:

  • 这帮助了我。如果您要包含布局等的部分视图,则需要将它们标记为 [AllowAnonymous]。
【解决方案2】:

我遇到了完全相同的问题,就像 Jonas 的更新所说,您需要注意返回部分视图并具有 [Authorize] 属性的操作。

您需要做的是删除 [Authorize] 属性,然后如果您的操作需要对用户进行身份验证才能正确呈现,请让您的代码处理未经授权的情况。

例如,如果您的页面通过 Partial 显示当前登录的用户名。如果当前登录的用户不可用,让您的操作显示空字符串或其他内容。

【讨论】:

    【解决方案3】:

    如果有,请检查您的 web.config

    <authorization>
      <deny users="?" />
    </authorization>
    

    其覆盖 [AllowAnonymous]

    添加到 web.config 部分:

    <location path="YourController/AnonymousMethod">
        <system.web>
          <authorization>
            <allow users="*"/>
          </authorization>
        </system.web>
      </location>
    

    允许匿名方法匿名访问

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2022-08-09
      • 2011-01-25
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多