在IIS中控制訪問MVC和WebAPI的問題是,路由有時很難確切地看到哪些路由在您的控制器上結束。這是完全有效的(並在許多情況下是首選)限制訪問代碼。
要在代碼中執行此操作,您可以執行類似以下操作的操作,該操作使用自定義的AuthorizeAttribute過濾掉未經授權的用戶。
public class InternalAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.Request.Properties.ContainsKey("MS_HttpContext"))
{
var ipAddress =
((HttpContextWrapper) actionContext.Request.Properties["MS_HttpContext"]).Request.UserHostAddress;
if (IsPrivateAddress(ipAddress))
{
return;
}
}
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Forbidden");
}
private bool IsPrivateAddress(string ipAddress)
{
// todo: verify ip address is in internal or otherwise whitelisted
}
}
然後,您可以註釋您的控制器並將過濾器應用於控制器中的所有操作。
[InternalAuthorize]
public class PrivateController : ApiController
{
}
注:如果信息/從這個控制器動作是特別敏感的,你可能需要部署一個版本的應用程序暴露出這個私有API,並阻止所有的流量不從白名單中,而不是依靠應用程序邏輯來阻止壞人。
CarlosB是對的,這是一個安全/防火牆解決方案,而不是代碼解決方案。 – jlafay
OP的建議將會起作用。 – CodeCaster