仅允许访问组,但允许访问所有人的API

时间:2013-03-03 21:28:22

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

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

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

更新

我只是想,我想避免使用属性标记每个方法 比如[Authorize]

1 个答案:

答案 0 :(得分:0)

想出来。

我只是应用了一个检查每个控制器命名空间的过滤器。由于我的所有API控制器都在HSServer.Controllers.Api,并且所有网络控制器都在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);
        }
    }
}