C# WebRequest 到为 Windows 身份验证配置的 URL

C# WebRequest to a URL that is configured for Windows Authentication

我正在尝试使用此处记录的 GetUserPhoto REST 请求从 Microsoft Exchange 中获取用户照片:https://msdn.microsoft.com/en-us/library/office/jj190905%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396

我的问题是无论我做什么,连接都会自动关闭,并且无法使用 NTLM 进行身份验证。 Microsoft 甚至提供了代码,但是当您 运行 在 IIS Web 应用程序中使用此代码时,即使它正在使用应用程序池 运行ning 作为域用户,它也永远无法进行身份验证。

这是我当前无法使用的代码:

request = System.Net.WebRequest.Create($"https://{Settings.ExchangeServer}/ews/exchange.asmx/s/GetUserPhoto?email={primarySmtpAddress}&size=HR240x240") as System.Net.HttpWebRequest;

                        request.ServerCertificateValidationCallback = delegate { return true; };
                        request.UseDefaultCredentials = true;
                        resp = request.GetResponse() as System.Net.HttpWebResponse;

现在我可以把它放在控制台应用程序中 运行 然后它就可以工作了。但在 IIS 中它根本不起作用。我什至尝试过 RestSharp,但没有成功。

听起来像是委托问题,例如,您模拟的凭据只能用于访问他们正在模拟的 IIS 服务器的本地资源。要访问 Exchange,您需要正确配置委派,请参阅 https://blogs.msdn.microsoft.com/emeamsgdev/2012/11/05/ews-from-a-web-application-using-windows-authentication-and-impersonation/

问题是它没有尝试连接 TLS 1.2。一旦它在我脑海中点击,错误消息是说连接关闭并且实际上没有返回 401。我使用 ServiceManager 将它设置为 TLS1.2 然后它开始工作。

Glen Scales 帮助我指明了正确的方向,但可以进一步解决问题。