【问题标题】:Allow access only to group, but API to all只允许访问组,但所有 API
【发布时间】:2013-03-03 21:28:21
【问题描述】:

我有一个我正在开发的 mvc4 内网网站,它有一个只有少数 AD 组可以访问的 Web 前端,但我也在使用 mvc4 的 Web API 功能,我需要向所有人开放用户,甚至是匿名用户。我曾尝试使用 Web.config,但这会阻止所有不在其中一个组中的用户。

如何在保持 API 开放的同时保护前端?

更新:

我只是想,我想避免用属性标记每个方法 喜欢[Authorize]

【问题讨论】:

  • 你在使用 .NET Membership 吗?
  • 不,它是一个 Intranet 应用程序并且正在使用 AD (Active Directory)
  • 您可以受益于.NET Membership even using AD!它会让你的工作更好更快!
  • 我什至没有在寻找那个,但那太棒了,我想我可以使用它!谢谢!

标签: .net asp.net-mvc-4 active-directory authorization intranet


【解决方案1】:

想通了。

我只是应用了一个过滤器来检查每个控制器的命名空间。由于我所有的 API 控制器都在 HSServer.Controllers.Api 中,而所有 Web 控制器都在 HSServer.Controllers.Web 中,所以我的 FilterConfig.cs 中的这段代码就像一个魅力。

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new FrontendAuthorize());
        filters.Add(new HandleErrorAttribute());
    }
}

public class FrontendAuthorize : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        try
        {
            if (!filterContext.Controller.GetType().Namespace.StartsWith("HSServer.Controllers.Api"))
                base.OnAuthorization(filterContext);
        }
        catch (NullReferenceException)
        {
            base.OnAuthorization(filterContext);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2013-09-22
    • 2016-02-27
    • 2011-07-31
    相关资源
    最近更新 更多