微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

任务计划程序启动 .EXE 程序,打开连接到数据库的网页,导致“NT 权限/匿名登录失败”

如何解决任务计划程序启动 .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,直接获取和解析数据,但由于一些原因,我不能。

  1. 我的公司拒绝让我使用 Microsoft 的“托管 DOM”.NET 组件,因为它依赖于 Internet Explorer,这在此处是严格禁止的(谢天谢地)。

  2. 我公司买AngleSharp也太便宜了,所以需要Chrome的DOM引擎。

  3. 我不能直接从浏览器执行此操作,因为我的公司也有严格且不可更改的 CORS 政策,绝对不允许这样做。因此调用通用处理程序来逃避 CORS 限制。

  4. 内部页面也被员工手动用来检索文档,ad hoc,所以我不能直接去掉它。

同样,如果我在使用我的凭据(普通用户凭据,而不是“管理员”)登录时直接运行 .NET 应用程序,则一切正常。

谁能告诉我为什么我们自己的 Web 服务器上的通用处理程序会收到“NT AUTH/ANONYMOUS 登录失败”,或者提出解决方案?

编辑:我已经看过这个问题:IIS application using application pool identity loses primary token?

但是,1) 重新启动并不能修复它。 2) 我不知道什么是“计算机密码”,3) 推荐的“修补程序”不能解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。