我有一个我正在开发的 mvc4 内部网网站,它有一个只有少数 AD 组可以访问的 Web 前端,但我也在使用 mvc4 的 Web API 功能,我需要向所有用户开放,甚至匿名的。我曾尝试使用 Web.config,但这会阻止所有不在其中一个组中的用户。
我将如何在保持 API 开放的同时保护前端?
更新:
我只是想,我想避免使用类似的属性标记每个方法[Authorize]
我有一个我正在开发的 mvc4 内部网网站,它有一个只有少数 AD 组可以访问的 Web 前端,但我也在使用 mvc4 的 Web API 功能,我需要向所有用户开放,甚至匿名的。我曾尝试使用 Web.config,但这会阻止所有不在其中一个组中的用户。
我将如何在保持 API 开放的同时保护前端?
更新:
我只是想,我想避免使用类似的属性标记每个方法[Authorize]
弄清楚了。
我只是应用了一个过滤器来检查每个控制器的命名空间。由于我所有的 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);
}
}
}