Exchange Online 和 EWS with Basic Auth 停止工作

Exchange Online and EWS with Basic Auth stopped working

我想使用具有基本身份验证的 EWS 托管 API 连接到 Exchange Online。

但在我的应用程序中,EWS AutodiscoverService 在使用基本身份验证时无法从 Exchange Online 检索邮箱设置 (GetUserSettings),但 oAuth 工作正常。

我收到 Microsoft.Exchange.WebServices.Data.ServiceRequestException 消息“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应 40.101.50.162:444"

我已经使用基本身份验证好几年了,几天前它刚刚停止工作。是否不再可以对 Exchange Online 和 EWS 使用基本身份验证?

代码示例

var ads = new AutodiscoverService
             {
                 RedirectionUrlValidationCallback = url => true,
                 EnableScpLookup = false
             };
ads.Credentials = new NetworkCredential( svcUsr, svcPwd ); // using these will throw an exception
ads.Credentials = new OAuthCredentials( token.AccessToken ); // these works
var res = ads.GetUserSettings( mailBox, UserSettingName.GroupingInformation );

异常

Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. Unable to connect to the remote server ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 40.101.28.194:444
       at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
       at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
       --- End of inner exception stack trace ---
       at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
       at System.Net.HttpWebRequest.GetRequestStream()
       at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetRequestStream()
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverRequest.InternalExecute()
       --- End of inner exception stack trace ---
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverRequest.InternalExecute()
       at Microsoft.Exchange.WebServices.Autodiscover.GetUserSettingsRequest.Execute()
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.InternalGetUserSettings(List`1 smtpAddresses, List`1 settings, Nullable`1 requestedVersion, Uri& autodiscoverUrl)
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.GetSettings[TGetSettingsResponseCollection,TSettingName](List`1 identities, List`1 settings, Nullable`1 requestedVersion, GetSettingsMethod`2 getSettingsMethod, Func`1 getDomainMethod)
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.GetUserSettings(List`1 smtpAddresses, List`1 settings)
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.InternalGetSoapUserSettings(String smtpAddress, List`1 requestedSettings)
       at Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverService.GetUserSettings(String userSmtpAddress, UserSettingName[] userSettingNames)
       at EWSAutoDiscovery.Program.Main(String[] args) in C:\Program.cs:line 57

已测试和验证的内容 [更新 1]

  1. 我已经验证了一些 EWS 操作仍然可以使用基本身份验证, 例如SyncFolderItems.
  2. 我已验证服务帐户用户和 EXO 常规配置都有身份验证策略。
  3. 我创建了一个在所有协议上启用 BasicAuth 的身份验证策略,并将其分配给 EXO 组织配置 DefaultAuthenticationPolicy 参数。
  4. 我已将身份验证策略分配给服务帐户和目标用户。
  5. 我已删除并重新应用服务帐户上的 ApplicationImpersonation 角色。

对于使用我的应用程序的所有 O365/Azure 租户,具有基本身份验证的自动发现在夜间再次开始工作。

Microsoft 一定已经修复了他们几天前坏掉的东西。