我有一个要在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.
有人看到任何错误或遗漏吗?
答案 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将是一项艰巨的要求。