3

我们目前正在寻找一个调度应用程序来集成到我们的解决方案中。我们非常接近锁定 Quartz.net,但有一个交易破坏者我在 Stackoverflow 或 Google 上都找不到任何解决方案。

问题在于通过 API 进行远程访问,例如:

NameValueCollection properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "instanceName";
properties["quartz.scheduler.proxy"] = "true";
properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler";

ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();

我们目前了解到,任何用户都可以使用与上述类似的代码,然后使用调度程序实例来管理/更改/添加作业等。问题是,我们需要限制这种访问(作为运行它的用户上下文可以访问敏感信息)。

在我们的理想情况下,我们希望锁定对指定用户的远程访问。这将允许授权用户从界面管理 Quartz。如果这是不可能的,那么我们将寻求一种解决方案,在不破坏从同一台机器访问 API 的能力的情况下锁定远程访问(缺点是用户需要登录服务器来管理石英)。

如果我们是第一个有这个要求的组织,我会很惊讶,其他人是如何解决这个问题的?

4

1 回答 1

2

简而言之,没有内置的身份验证/授权方案。

首先,即使恶意用户可以访问接口(如果人们怀有敌意,对我来说这似乎是一个不安全的网络)这个人只能管理调度程序。因此,可以披露的信息是工作/触发器名称和组。用户可以恶意触发作业运行,该作业的编码不够健壮,无法比最初预期的更频繁地运行。

外部方无法访问允许执行的作业,这包括连接字符串等或实际作业逻辑。外部方也将无法添加服务器 bin 目录中不存在的更多作业 - 因此作业被锁定,实际上不会发生任何意外。

确实想到的一件事是,用户可以使用参数安排本机作业,以对使用服务权限运行的系统执行有害操作。

解决这个问题的一种方法是使用简单的控制界面,如 Web 服务/Web 应用程序,它会处理权限等,并连接到 localhost 的 Windows 服务,否则会受到防火墙保护。

于 2013-03-06T15:30:56.317 回答