gpt4 book ai didi

iis - System.Net.WebClient 不适用于 Windows 身份验证

转载 作者:行者123 更新时间:2023-12-04 00:24:26 26 4
gpt4 key购买 nike

我正在尝试在 WinForms 应用程序中使用 System.Net.WebClient 将文件上传到具有 Windows 身份验证的 IIS6 服务器
它只是“身份验证”方法。

WebClient myWebClient = new WebClient();
myWebClient.Credentials = new System.Net.NetworkCredential(@"boxname\peter", "mypassword");
byte[] responseArray = myWebClient.UploadFile("http://localhost/upload.aspx", fileName);

我收到“远程服务器返回错误:(401) 未经授权”,实际上是 401.2

客户端和 IIS 都在同一台 Windows Server 2003 Dev 机器上。

当我尝试在 Firefox 中打开页面并输入与代码中相同的正确凭据时,页面出现。
然而,当使用 IE8 时,我得到了同样的 401.2 错误。

尝试了 Chrome 和 Opera,它们都可以工作。

我在 IE Internet 选项中启用了“启用集成 Windows 身份验证”。

安全事件日志有一个失败审计:
Logon Failure:
Reason: An error occurred during logon
User Name: peter
Domain: boxname
Logon Type: 3
Logon Process: ÈùÄ
Authentication Package: NTLM
Workstation Name: boxname
Status code: 0xC000006D
Substatus code: 0x0
Caller User Name: -
Caller Domain: -
Caller Logon ID: -
Caller Process ID: -
Transited Services: -
Source Network Address: 127.0.0.1
Source Port: 1476

我使用 Process Monitor 和 Fiddler 进行调查,但无济于事。

为什么这适用于 3rd 方浏览器而不适用于 IE 或 System.Net.WebClient?

最佳答案

我看到了一个类似的问题,其中集成/NTLM 安全仅在您通过机器名称或本地主机访问主机时才起作用。事实上,它是 Windows 中的一个[糟糕] 文档功能,旨在防止“反射攻击”。

基本上,您需要在尝试访问服务器的机器上创建一个注册表项,并将您尝试访问的域列入白名单。每个主机名/FQDN 都需要在它自己的行上 - 没有通配符并且名称必须完全匹配。来自知识库文章:

  • 单击开始,单击运行,键入 regedit,然后单击确定。
  • 在注册表编辑器中,找到并单击以下注册表项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
  • 右击 MSV1_0 ,指向新建,然后单击多字符串值。
  • 类型 返回ConnectionHostNames ,然后按 Enter。
  • 右击 返回ConnectionHostNames ,然后单击修改。
  • 在“数值数据”框中,键入本地计算机上站点的主机名或主机名,然后单击“确定”。
  • 退出注册表编辑器,然后重新启动计算机。

  • http://support.microsoft.com/kb/956158/en-us

    关于iis - System.Net.WebClient 不适用于 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1030177/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com