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



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

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

这是我当前的代码不起作用:

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。我使用服务管理器将其设置为TLS1.2,然后它开始工作。

Glen Scales帮助我指出了正确的方向,但可以进一步排除故障。

最新更新