【问题标题】:401 Authentication error while running C# Application executing HttpWebRequest运行 C# 应用程序执行 HttpWebRequest 时出现 401 身份验证错误
【发布时间】:2016-01-19 23:26:28
【问题描述】:

我想知道如何解决这个问题,即在 IIS 7/8 上运行的具有 Windows 身份验证的 WebApp 在向另一个站点执行 HttpWebRequest 时抛出 401 错误。如果我在本地运行,即调试模式,这个 WebApp 可以正常工作。

这里是代码sn-p

HttpWebRequest webReq;
webReq = (HttpWebRequest)WebRequest.Create("http://sharepoint_site/_vti_bin/listdata.svc/mylist);
webReq.Accept = "application/json";
webReq.UseDefaultCredentials = true;
webReq.Credentials = CredentialCache.DefaultNetworkCredentials;
//webReq.Credentials = new NetworkCredential("user","password","domain");

webReq.Method = "GET";
webReq.KeepAlive = true;
Stream objStream = webReq.GetResponse().GetResponseStream();
StreamReader objReader = new StreamReader(objStream);
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();

我还可以通过在注册表中添加 BackConnectionHostNames 条目来使其工作

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0

但我需要传入我不喜欢的凭据(上面已注释),因为我不想使用我的帐户或任何服务帐户。

我希望 WebApp 使用 DefaultNetworkCredentials 或 DefaultCredentials。我在托管此 WebApp 的机器的 IIS 上启用了 Windows 身份验证和 NTLM 提供程序。

任何帮助将不胜感激,感谢这个社区的更多力量。

【问题讨论】:

    标签: c# iis sharepoint http-status-code-401


    【解决方案1】:

    CredentialCache.DefaultNetworkCredentials 使用进程正在运行的网络凭据。如果它在 IIS 中运行,它将是应用程序池标识,Web 服务不会接受。

    您要么必须在代码中传递不同的凭据(您说过不想这样做),要么更新应用程序池以使用网络凭据运行(右键单击 IIS 中的应用程序池 -> 高级设置 ->身份)

    【讨论】:

    • 好的,我将应用程序池标识设置为网络服务。我也不想在那里放置自定义帐户。这不应该将网络中当前登录用户的凭据一直传递到 HttpWebRequest 调用吗?
    • 用户是否使用他们的网络凭据对您的网站进行身份验证?您可以打开Impersonation,以便它使用访问该站点的人的凭据。
    • 我启用了模拟,然后切换到经典管道模式,但仍然收到 401 错误,除非我在应用程序池上提供了我不想要的自定义身份。我已经尝试过 Network Service 和 ApplicationPoolIdentity 但仍然不行。这是 NTLM 无法将凭据从父站点传递到另一个站点的限制吗?
    • 您无需更改为经典管道。使用来自this blog 的选项 2。这只是一个 web.config 更新以使该错误消失。然后检查 DefaultNetworkCredentials 是否是您认为应该的(在调试时,或将 CredentialCache.DefaultNetworkCredentials.UserName 输出到页面)。
    • 好的,这是有趣的 web.config 设置,是的,它在集成模式管道上运行时设置 impersonation=true 时会抑制 501 错误,但仍然无法解决 401 错误。是的,我正在页面上显示用户的登录名,并按预期显示。
    猜你喜欢
    • 2016-03-22
    • 2012-04-24
    • 2012-09-13
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    相关资源
    最近更新 更多