确保只有一个计划任务可以调用控制器操作

时间:2016-03-03 05:40:53

标签: c# asp.net asp.net-mvc security scheduled-tasks

我的ASP.NET MVC 4网站有一个控制器操作,计划任务每​​30分钟调用一次。为方便起见,我使用它来代替服务。

Action将执行一些基本的管理任务,我想确保只有这个计划任务可以调用它。计划任务将调用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对此类自动调用的访问?

1 个答案:

答案 0 :(得分:2)

您可以在控制器和计划任务之间使用shared-secret,而不是使用IP地址。这样,如果ip地址发生变化,你仍然可以连接。

主要概念是您有一些密码,长密码或随机的字符组合,只有发送方和接收方之间才知道。您需要确保拥有加密连接,以便无法嗅探共享密钥。