如何获得HTML Agility对Windows Integrated Security应用程序进行身份验证?

我正在尝试使用HTML Agility包刮取我的应用程序页面并将其作为邮件正文嵌入。这在使用this answer的开发机器上产生了奇迹,但是当我在远程IIS服务器上发布它时,我得到了401.1错误页面作为邮件正文。

该应用程序使用Windows集成安全性进行身份验证和授权,我已经在应用程序池上设置了服务帐户。因此,我尝试手动设置凭据以使用与应用程序池相同的帐户,并将其添加到授权角色,但仍然遇到相同的问题。

这是我用来获取页面的代码:

var lAuthentification = new NetworkCredential("username","password","domain");
var lProxy = new WebProxy() { Credentials = lAuthentification };
var lWeb = new HtmlWeb();
lWeb.PreRequest = delegate (HttpWebRequest webRequest)
{
    webRequest.Timeout = 1200000;
    return true;
};
var lPage = lWeb.Load(pURL,"GET",lProxy,lAuthentification);

我尝试了这两种方法,并尝试了前面提到的答案中链接的解决方案,该解决方案在我的机器上可以正常运行:

var lProxy = new WebProxy() { UseDefaultCredentials = true };
var lWeb = new HtmlWeb();
lWeb.PreRequest = delegate (HttpWebRequest webRequest)
{
    webRequest.Timeout = 1200000;
    return true;
};
var lPage = lWeb.Load(pURL,CredentialCache.DefaultNetworkCredentials);

在我的控制器顶部,我有authorize子句[Authorize(Roles = @"RoleNames")],因为所有数据都是敏感的。 许多消息源解释说,在应用程序池上设置域帐户时,必须设置SPN,但显然是up until IIS6,而我们在IIS8(Windows Server 2012)上,所以不应该将其关联想。

我喜欢这个总体思路,如果我有一个已经包含所有信息的页面,我就不想用字符串生成器来构建邮件正文并从数据库中查找数据,所以也许有一种获取方法处理的剃须刀页面而没有发出Web请求?

lixuanpei 回答:如何获得HTML Agility对Windows Integrated Security应用程序进行身份验证?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3059727.html

大家都在问