无法通过EWS访问共享邮箱。 401未经C#授权

时间:2019-10-09 22:16:50

标签: c# exchangewebservices

我有一个要在EWS中连接的共享邮箱。我可以从Outlook 2016实例访问邮箱而不必提供凭据。当我尝试通过EWS访问它时,出现以下错误:

  

“请求失败。远程服务器返回错误:(401)未经授权。”

我正在我的AD帐户下运行此代码,该帐户可以访问此邮箱。为什么在这种情况下我无法访问?下面是有问题的代码。

        service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

        service.UseDefaultCredentials = true;

        var shared_mailbox = new FolderId(WellKnownFolderName.Inbox, "mailbox@mydomain.com); 
        FindItemsResults<Item> results = service.FindItems(shared_mailbox, dateTimeFilter, view); //401 is thrown here. 

有人看到任何错误或遗漏吗?

1 个答案:

答案 0 :(得分:0)

我建议您考虑使用现代身份验证(这也是Outlook应该使用的身份验证)。要使用当前登录的凭据,您需要使用MSAL库并遵循https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Integrated-Windows-Authentication

拥有令牌后,请使用

 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2016);
 service.Url = new Uri("https://outlook.office365.com/ews/exchange.asmx");
 service.Credentials = new OAuthCredentials(TokenResult.AccessToken);
 service.HttpHeaders.Add("X-AnchorMailbox", MailboxName);

明年基本认证将不复存在,因此在将来使用OAuth将是一项艰巨的要求。