系统。网。Web客户端不起作用Windows身份验证
题
我试图使用系统。网。Web客户端在它的应用程序将一个文件上载到一个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服务器2003年开发机。
当我试着打开网页Firefox和进入相同的正确的凭证作为在代码,该网页。但是当使用IE8,我得到同样的401.2错误。
试图铬和歌剧和他们两个的工作。
我有'启用综合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
我用过程监视器和小提琴手调查,但都无济于事。
为什么会这项工作于3方浏览器,但不是随即或系统。网。Web客户端?
解决方案
我已经看到类似的问题,那里的综合/NTLM安全,只会的工作,如果你访问的主机计算机名称或localhost。事实上,它是一个[不]号文件的功能在窗户那是设计来保护针对的"反思的攻击"。
基本上,你需要创建一个注册表中关键的计算机上尝试访问服务器、和白名单的域正试图以打击。每个主机名称/FQDN需要在它自己的行-有没有通配符的名称必须完全匹配。从KB文章:
- 点击开始,点击运行,型regedit,然后点击"确定"。
- 在注册编辑、查找,然后点击下注册的关键:此系统\CurrentControlSet\控制\Lsa\MSV1_0
- 右击 MSV1_0, 指向新,然后点击多串的价值。
- 类型 BackConnectionHostNames, ,然后再按进入。
- 右击 BackConnectionHostNames, ,然后点击修改。
- 在价值的数据类型框主机名称或主机名称站在当地计算机,然后点击"确定"。
- 退出注册的编辑,然后重新启动的计算机。
其他提示
你试过......
new NetworkCredential( "peter", "password", "boxname" );
您也可以尝试......
var credCache = new CredentialCache();
credCache.Add( new Uri ("http://localhost/upload.aspx"),
"Negotiate",
new NetworkCredential("peter", "password", "boxname"));
wc.Credentials = credCache;
此外,根据此,可能是IIS配置错误。尝试替换“谈判”与“基本”相同在上面并检查您的IIS配置的网站。还有一堆可能的原因这里。
尝试进入IE的选项并明确将网站添加到Intranet区域。然后重新运行该程序。您也不应该从管理员登录中运行该程序。这可能会触发 Internet Explorer的增强安全配置。
它可以解释为什么你可以使用Firefox和Opera访问该网站,但不能使用IE或WebClient。
在不知道您的IIS部署的情况下,并假设您在IIS中拥有正确的上传设置授权规则(例如,右侧允许* ACL,您尝试将内容上传到其他目录等),首先我会尝试是将UseDefaultCredentials设置为true而不是显式设置Credential。 (也许您认为您正在使用您正在设置的凭据访问服务器但情况并非如此?如果可行的话,这将是可能的。)
这是一种非常常见的情况,因此我将重点关注您尝试上传文件的目录的IIS授权规则,即该目录上的实际ACL。对于前者你的网站是否冒充?如果是,那么你必须在该目录上有实际的ACL,否则无论是什么帐户应用程序池都在运行。