确保只有计划任务可以调用控制器操作
Make sure that only a Scheduled Task can call a Controller Action
我的 ASP.NET MVC 4 网站有一个控制器动作,计划任务每 30 分钟调用一次。为了方便起见,我用它代替服务。
该操作将执行一些基本的管理任务,我想确保只有这个计划任务可以调用它。计划任务将调用 www.mywebsite.com/Admin/PerformAdmin
,如下所示。
public ActionResult PerformAdmin()
{
// Only allow IP of my own server in
if(Request.ServerVariables["REMOTE_ADDR"] == "192.145.5.52") {
// Do admin tasks
}
return View();
}
这是我认为可行的一种方法,但它看起来很乱。是否有更可靠、经过验证的方法来限制 Controller 访问像这样的自动调用?
您可以在控制器和计划任务之间使用 shared-secret 而不是使用 IP 地址。这样,如果 IP 地址发生变化,您仍然可以连接。
主要概念是您拥有一些只有发送方和接收方知道的密码、长密码或随机字符组合。您将需要确保有一个加密的连接,这样就不可能嗅探到共享的秘密。
我的 ASP.NET MVC 4 网站有一个控制器动作,计划任务每 30 分钟调用一次。为了方便起见,我用它代替服务。
该操作将执行一些基本的管理任务,我想确保只有这个计划任务可以调用它。计划任务将调用 www.mywebsite.com/Admin/PerformAdmin
,如下所示。
public ActionResult PerformAdmin()
{
// Only allow IP of my own server in
if(Request.ServerVariables["REMOTE_ADDR"] == "192.145.5.52") {
// Do admin tasks
}
return View();
}
这是我认为可行的一种方法,但它看起来很乱。是否有更可靠、经过验证的方法来限制 Controller 访问像这样的自动调用?
您可以在控制器和计划任务之间使用 shared-secret 而不是使用 IP 地址。这样,如果 IP 地址发生变化,您仍然可以连接。
主要概念是您拥有一些只有发送方和接收方知道的密码、长密码或随机字符组合。您将需要确保有一个加密的连接,这样就不可能嗅探到共享的秘密。