C# Webclient 和 Httpclient如何通过iis authentication 身份验证。

前言:
该博客产生的背景是客户那边有部署网站的方法是iis windows authentication身份验证,而系统中使用
Webclient来调用别的系统的方法。在此情况下,原本可以使用的功能,都不能调用方法了,返回结果
是401。在经过艰难地查找资料之后,也没有找到很好的方法来解决。找到的几个方法也不能很好的解
决我的问题(实际这些方法都是有用的,但是还是不能完全解决我的问题,导致我在开始解决这个问题
的时候走了好多的弯路),下面就先把这些方法说一下,思路都是要通过验证:

1,设置client.UseDefaultCredentials = true;
一般该而言都是有效的,最后我也使用了这个方法,但是我的情况还需要其它的修改。这个稍后再说。
还可以使用client.Credentials = CredentialCache.DefaultCredentials;据说2个方法是等效的。

2,设置client.Credentials = new System.Net.NetworkCredential("*", "");分别填入该部署服务器的用户名和
密码,这个方法是直接可行的,但对我而言不太现实,首先客户愿不愿意把帐号和密码写到配置你不说,而且他
们也不是太懂代码,写了之后换密码,换人维护项目都不是太好的选择方案。因此当时暂时被我放弃,想着如果
找不到好的解决方案的话,最后没有办法就使用这个方法。

3,此外还找了一些其它的方法,但几乎没有什么用处,就不在这里一一列举了。

在经过艰难,痛苦和绝望之后,我现在是和iss authentication设置有关,由于没有客户那边的环境,我这边的环
境也是自己搭建的,找了好多最后终于找到一篇文章,按照上面说法需要把NTLM放在第一位,具体的原理也不
是太清楚。当时环境是自己搭建的,所以也不是很懂,但是在把NTLM放在第一位后,加上第一种的验证方式,
终于可以用ip的方式来调用方法。

把代码发给客户以后,客户的确没有再提这个问题了,但是域名方式不知道在客户那能不能使用。自己本地因为
使用hosts来模拟的是不行的,想用花生壳来模拟下,但是要注册就暂时没搞了。

原文地址:https://www.cnblogs.com/ylzhang/p/6825836.html