如何解决任务计划程序启动 .EXE 程序,打开连接到数据库的网页,导致“NT 权限/匿名登录失败”
我有一个启动 .NET .exe 应用程序的 Windows 任务计划程序任务。
(当你深入研究时,请记住,所有这些都是为了避免我公司的严格、不可抗拒的 CORS 政策)
此应用程序“向操作系统发出指令”,将 Chrome 打开到我们自己的 Web 服务器上的特定 URL,以便对“外部”第三方 Web 服务器进行 API 调用:
Process p = Process.Start(
"C:\Program Files\Google\Chrome\Application\chrome.exe","https://_OUR_Company.com/index.html?doc_id=" + doc_id
);
此页面在加载时向通用处理程序发出 XMLHttpRequest 以从第三方网页的外部获取页面:
let xhr = new XMLHttpRequest();
xhr.open("GET","handlers/GetDocument.ashx?doc_id=" + doc_id);
xhr.send();
通用处理程序然后:
WebRequest request = WebRequest.Create("https://_THEIR_Company.com/documents.html?doc_id=" + doc_id);
一旦它获得了外部页面,它就会将此内容加载到我们的网页中的 DIV 中,然后我可以使用浏览器的 DOM 方法对其进行操作和解析。
xhr.onload = ((x) => {
// insert obtained page data into content DIV
document.getElementById("mainContent").innerHTML = x.target.responseText;;
// start parsing it:
let DocData = document.getElementById("mainContent").querySelector("#doc-info-header");
var docID = DocData.substring(0,5); // etc etc .....
}
最后,另一个 XMLHttpRequest() 用于获取解析的数据,并将其存储在 sql Server 数据库中。
xhr.open("POST","handlers/SaveDocumentData.ashx?data=" + jsonData);
xhr.send();
我们的内部网页位于使用 应用程序池 的本地 Active Directory 服务帐户以及“运行方式...” 凭据的站点上对于 IIS 站点本身。同一个服务帐户也用于运行任务计划程序任务。此服务帐户还具有对数据库表的完全 R/W 访问权限。因此,一切都应该在有效的 AD 服务帐户下执行。
如果我在使用域登录凭据登录时直接运行 .NET .exe 程序,所有这些都可以完美运行。
但是,一旦我让任务计划程序运行它,我就会收到来自 sql Server 的“NT 权限/匿名登录失败”错误消息。
我怀疑网页本身是在 AD Credentials 下运行的,但是对 Generic Handler 的调用造成了一种情况,其中将数据保存到数据库的 Generic Handler 不在任何情况下运行特定凭据(它在服务器上运行),因此在没有任何凭据的情况下到达 sql Server 并且默认为“NT AUTHORTY
”,但我不确定,并且对更正持开放态度/smackdown 没有任何感觉受到伤害。 ;-)
我想重写应用程序,让 Task Scheduler .EXE 调用第三方网站的 API,直接获取和解析数据,但由于一些原因,我不能。
-
我的公司拒绝让我使用 Microsoft 的“托管 DOM”.NET 组件,因为它依赖于 Internet Explorer,这在此处是严格禁止的(谢天谢地)。
-
我公司买AngleSharp也太便宜了,所以需要Chrome的DOM引擎。
-
我不能直接从浏览器执行此操作,因为我的公司也有严格且不可更改的 CORS 政策,绝对不允许这样做。因此调用通用处理程序来逃避 CORS 限制。
-
内部页面也被员工手动用来检索文档,ad hoc,所以我不能直接去掉它。
同样,如果我在使用我的凭据(普通用户凭据,而不是“管理员”)登录时直接运行 .NET 应用程序,则一切正常。
谁能告诉我为什么我们自己的 Web 服务器上的通用处理程序会收到“NT AUTH/ANONYMOUS 登录失败”,或者提出解决方案?
编辑:我已经看过这个问题:IIS application using application pool identity loses primary token?
但是,1) 重新启动并不能修复它。 2) 我不知道什么是“计算机密码”,3) 推荐的“修补程序”不能解决这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。