【问题标题】:Web API anonymous service access with forms authentication带有表单身份验证的 Web API 匿名服务访问
【发布时间】:2012-12-10 15:42:22
【问题描述】:

我正在尝试确定如何在表单身份验证下配置对 Web API 控制器服务的访问。如果我通过添加授权元素添加授权配置以拒绝所有匿名用户:




授权>

只有登录页面可以按预期访问。但我也想访问从控制器返回的列表。我将 [AllowAnonymous] 属性添加到一个简单的服务,该服务返回用于填充下拉菜单的值。例如:

namespace WebAPI.Controllers
{
    public class RegisterController : ApiController
    {
        [AllowAnonymous]
        public List<ListElement> GetActivitiesList()
        {
            List<ListElement> li = new List<ListElement>();

            li.Add(new ListElement() { Id = 1, Text = "Item 1" });
            li.Add(new ListElement() { Id = 2, Text = "Item 2" });
            li.Add(new ListElement() { Id = 3, Text = "Item 3" });

            return li;

        }

    }
}

我将控制器目录添加到 web.config 中的允许列表中:





授权>


如果我浏览我的示例页面来调用控制器,即使我添加了 [AllowAnonymous] 属性,表单身份验证仍然会通过 302 重定向拒绝访问登录页面。如果我删除整个网站的授权元素“”,我可以使用 [Authorize] 和 [AllowAnonymous] 属性控制访问。

目标是能够在几个页面上为匿名用户使用特定服务(如注册),而站点的其余部分访问权限仅限于经过身份验证的用户。访问服务和访问文件并不完全一样,所以我的猜测是我必须为这种情况编写一个特殊的处理程序,但我不确定如何去做。

【问题讨论】:

  • 我应该提到我正在更新一个 Web 窗体应用程序,并通过 NuGet 安装了 Web API。该项目不是 MVC 应用程序。考虑到潜在的安全风险,此时最好的办法可能是创建一个新的 Web API 应用程序。感谢您的指点。

标签: asp.net web-config asp.net-web-api forms-authentication


【解决方案1】:

首先,当您使用 ASP.NET MVC 时,不要使用老式的 ASP.NET 允许/拒绝机制来控制访问。我认为这不受支持,并且可能会在您的站点中创建安全漏洞 (source)。在 ASP.NET MVC 中控制访问的正确方法是在您的问题中提到的控制器类和/或方法上使用 [Authorize] 和 [AllowAnonymous] 属性。

如果你想让你的整个应用程序对除了一对之外的每个方法都需要登录,你可以将类级别的 [Authorize] 属性应用于所有控制器,然后将 [AllowAnonymous] 属性应用于那些不需要身份验证的方法的方法级别。还有一种编写 FilterProvider 的方法,它会以编程方式自动将 [Authorize] 属性应用到任何尚未应用此类属性的控制器。这很方便,因为这样您就不会意外忘记应用 [Authorize] 属性。有关如何执行此操作的详细信息,请参阅this article。请注意,MVC4 中引入的 [AllowAnonymous] 属性与作者在文章中描述的自定义 [Public] 属性执行相同的功能。另请参阅this article,它通常谈论保护 MVC 应用程序。两篇文章都有点过时(2011 年),但基本思想仍然合理。

【讨论】:

    【解决方案2】:

    首先我们对应用程序的其余部分一无所知 - 是 MVC 还是 WebForms?

    如果您的应用是 MVC,我完全同意 Brian 的观点,即您应该在所有控制器上使用 [Authorize] 和 [AllowAnoynmous]。

    如果你不能这样做——你确实可以在规则中“打洞”——但你需要使用“真实”的 URL,比如

    ..是的 - 小心;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多