繁体   English   中英

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

[英]Using EWS Managed Api with Office 365 Api

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

  • 我在Azure AD中具有管理员权限。
  • 我已经在Azure AD中成功注册了我的应用程序。
  • 我从Azure AD获得了客户端ID,应用程序密钥和资源ID。
  • 我已启用“具有对用户邮箱的完全访问权限。Jason建议。
  • 我已经成功创建了MVC5 Web应用程序。
  • 我关注了杰里米(Jeremy)的博客文章。

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

我的控制器中的代码:

   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)帮助我解决了我的问题。 链接:
使用OAuth的Office 365 / EWS身份验证:受众声明值无效

我检查了EWS跟踪,了解到EWS抱怨无效的令牌和特权不足。 我将应用程序重新注册到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. !!");
        //}  

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

这是完成身份验证主要任务的控制器的完整代码。

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.");

我注意到的重要一点是,我不能使用相同的令牌来访问office365 api和EWS托管的Api,因为EWS可以完全访问邮箱,而office365则不能。 我要求开发者确认这一点,也许我做错了,但是我的问题现在已经解决了。

是的,是的。 EWS所需的范围与Office 365 API不兼容,反之亦然。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM