gpt4 book ai didi

c# - 将 EWS 托管 Api 与 Office 365 Api 结合使用

转载 作者:行者123 更新时间:2023-11-30 20:46:23 25 4
gpt4 key购买 nike

我正在尝试通过 Azure AD 将 EWS 管理的 Api 与 Office 365 Api 结合使用。到目前为止,我已经完成了以下任务。

  • 我在 Azure AD 中拥有管理员权限。
  • 我已在 Azure AD 中成功注册我的应用程序。
  • 我从 Azure AD 获得了客户端 ID、应用程序 key 和资源 ID。
  • 我已启用“具有对用户邮箱的完全访问权限。正如 Jason 所建议的。
  • 我已成功创建 MVC5 网络应用程序。
  • 我已关注 Jeremy 的这篇博文。

这是我关注的博客的链接: http://www.jeremythake.com/2014/08/using-the-exchange-online-ews-api-with-office-365-api-via-azure-ad/#comment-280653

我的 Controller 中的代码:

   var outlookClient = await AuthHelper.EnsureOutlookServicesClientCreatedAsync("Mail");

IPagedCollection<IMessage> messagesResults = await outlookClient.Me.Messages.ExecuteAsync();

string messageId = messagesResults.CurrentPage[0].Id;
string tokenx = AuthHelper.GetSessionToken();
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.HttpHeaders.Add("Authorization", "Bearer " + tokenx);
service.PreAuthenticate = true;
service.SendClientLatencies = true;
service.EnableScpLookup = false;
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

ExFolder rootfolder = ExFolder.Bind(service, WellKnownFolderName.MsgFolderRoot);

已编辑:我正在成功获取 accessToken 并使用它对 EWS 管理的 Api 进行调用,但它因 403:Forbidden 异常而失败。非常感谢您的帮助。

最好的问候,

最佳答案

Jason Johnston 帮助我解决了我的问题。链接:
Office 365 / EWS Authentication using OAuth: The audience claim value is invalid

我检查了 EWS 跟踪,得知 EWS 提示无效 token 和权限不足。我将我的应用程序重新注册到 Azure AD 并启用了对邮箱的完全访问权限。

我在下面评论了这段代码。

//var outlookClient = await AuthHelper.EnsureOutlookServicesClientCreatedAsync("Mail");
//try
//{
// IPagedCollection<IMessage> messagesResults = await outlookClient.Me.Messages.ExecuteAsync();

// string messageId = messagesResults.CurrentPage[0].Id;
//}
//catch
//{
// System.Diagnostics.Debug.WriteLine("Something bad happened. !!");
//}

我正在从下面的链接示例中获取访问 token 。 https://github.com/OfficeDev/Office-365-APIs-Starter-Project-for-ASPNETMVC

这里是完成身份验证主要任务的 Controller 的完整代码。

string resourceUri = "https://outlook.office365.com";
var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext(Settings.Authority, new NaiveSessionCache(signInUserId));
string tokenx = await AuthHelper.AcquireTokenAsync(authContext, resourceUri, Settings.ClientId, new UserIdentifier(userObjectId,UserIdentifierType.UniqueId));

System.Diagnostics.Debug.WriteLine("Token:" + tokenx);

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.TraceListener = new EwsTrace();
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.HttpHeaders.Add("Authorization", "Bearer " + tokenx);
service.PreAuthenticate = true;
service.SendClientLatencies = true;
service.EnableScpLookup = false;
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

ExFolder rootfolder = ExFolder.Bind(service, WellKnownFolderName.MsgFolderRoot);

Console.WriteLine("The " + rootfolder.DisplayName + " has " + rootfolder.ChildFolderCount + " child folders.");

我注意到的重要一点是,我不能使用相同的 token 来访问 office365 api 和 EWS 管理的 Api,因为 EWS 可以使用完整的邮箱访问权限,而 office365 不能。我请求开发人员确认这一点,也许我做错了什么,但是我的问题现在已经解决了。

关于c# - 将 EWS 托管 Api 与 Office 365 Api 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27077529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com