1

我有一个 ASP.NET 应用程序,我正在 ASP.NET 开发服务器上对其进行测试。该应用程序旨在从 Intranet 共享点站点下载文件。我正在WebClient.DownloadFile()为此目的使用。但我得到以下异常 -

“远程服务器返回错误:(401)未经授权。”

我在运行应用程序时登录到 Windows 的帐户可以访问我要下载的资源。

我也尝试在 ro 上运行应用程序,IIS 7.5为应用程序池提供下载文件所需的身份。但仍然得到同样的错误。

知道究竟是什么问题以及如何克服它?提前致谢!

4

4 回答 4

2

这是双跳委托的问题。看看这个:http ://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx

于 2012-08-22T06:51:39.750 回答
1

假设 SharePoint 站点上的正常 Windows (NTLM) 身份验证。

您最可能通过设计行为“双跳委派”有时称为“单跳 NTLM 地狱” - 从客户端(浏览器)传递到服务器(您的 ASP.Net 应用程序)的凭据不能开箱即用。结果,您的 ASP.Net 应用程序自动成为或多或少的匿名用户,并且无法在 SharePoint 网站上进行授权。

解决它的常用方法 - 拥有某种受信任的帐户并在该帐户下运行您网站的代码。比访问站点时,您在进程帐户下运行代码(不冒充用户)。您需要审查代码以采取合理的安全措施,因为错误将允许任何人使用您的网站访问该特殊帐户下的 SharePoint/其他资源。

于 2012-08-22T06:56:22.903 回答
1

通过将 WebClient 的UseDefaultCredentials属性设置为 true 解决了问题

于 2012-08-22T10:16:02.680 回答
0

正如 Kirill 所提到的,这是一个 Kerberos 问题。在开始设置 SPN 等之前,请先按照此链接上的建议进行操作。

我最近经历了令人沮丧的一周,试图让 Kerberos 在锁定的域上工作,最后我发现我所要做的就是将 useAppPoolCredentials 设置为 true。

如果这没有帮助,这个链接也对我很有用。

祝你好运!

于 2012-08-22T06:57:03.773 回答