【问题标题】:Get published Office 365 calendar JSON without OAuth2 step?在没有 OAuth2 步骤的情况下获取已发布的 Office 365 日历 JSON?
【发布时间】:2014-12-12 18:14:58
【问题描述】:

编辑:

最初,问题是如何在没有身份验证的情况下以 JSON 格式获取 Office365 日历;但是,我的意思是如何在不需要 OAuth2 步骤的情况下以 JSON 格式获取 Office365 日历(因此,例如在服务器端,其他身份验证方法可以用于检索日历数据)。

问题:

我想使用 Office 365 REST API 来访问这个已发布的日历(即,只有在日历发布后才进行“读取”操作),以便我可以按照自己喜欢的方式“设置”日历。因此,我正在寻找一种公共 API 方法来使用我的一个日历。我发现的 Office 365 REST API 的代码示例使用 OAuth 对客户端进行身份验证。这似乎有点矫枉过正。

我已经提出了一些可能的解决方案,因此欢迎就最佳方法提出任何建议。

背景:

我在 Office365 中有一个已发布的日历,它为我提供了一个提要:

http://outlook.office365.com/owa/calendar/USER@DOMAIN/CALENDAR_NAME/calendar.ics

和网址:

http://outlook.office365.com/owa/calendar/USER@DOMAIN/CALENDAR_NAME/calendar.html

我该如何做“calendar.html”正在做的事情,以便我可以按照我希望的方式显示日历(而不是 Office365 提供的 IFrameing)?

示例:

以下是使用 REST API 的示例 URL:

https://outlook.office365.com/api/v1.0/users/USER@DOMAIN/calendars

浏览器将弹出一个基本身份验证对话框,因此看起来 OAuth 不是唯一需要的方法(一种可能的解决方案,请求可以从使用基本身份验证调用 REST API 的本地服务器代理)。

问题:

  • 一个问题可能是日历“发布”功能适用于有限数量的数据(例如,最多一年前或最多未来),我认为这就是 iCalendar (*. ics) 文件将包含任何请求。

  • 使用带有身份验证的 REST API 假定没有日期范围限制(由于可以使用 REST API 查询日历,我假设您可以查询超过一年)。

可能的解决方案:

  • 通过使用基本身份验证进行 REST API 调用来代理来自另一台服务器的请求。可能还需要缓存,因为看起来响应时间可能很慢。日历可以是使用本地端点的 JavaScript,也可以是在服务器上生成的 HTML 内容。

  • 看起来 Office365 AuthenticationContext.AcquireTokenAsync() 将接受 ClientCredential(客户端 ID 和密码)或 UserCredential(简单的用户名和密码)。所以,我想我可以通过手动将凭据传递给获取令牌的函数来运行使用 Office365 库的本地代理服务。 (我仍然需要对此进行测试以确保该功能确实可以这样工作。)

  • 只需 iFrame 由 Office 365 提供的“calendar.html”页面。(防止跨域,除非它位于 Microsoft 托管解决方案之一“Something Webs”上。) p>

  • 如果使用 iCalendar (*.ics) 提要,则需要一个将 iCalendar 格式转换为 JSON (https://github.com/kewisch/ical.js) 的函数,然后可以使用 JavaScript 或日历库来设计一个自定义日历。 (这对于查看一年的日历事件而不兑现并提供查询机制不是很方便,除了显示前后一个月。所以,可以使用某种 ics2json FullCalendar 可能仅适用于几个月的日历历史记录。)

欢迎对最佳方法(或此处未列出的其他方法)提出任何建议。

【问题讨论】:

  • 我无法让 AcquireTokenAsync 仅使用 UserCredential。因此,目前使用基本身份验证进行手动 REST API 调用看起来更可行。
  • 你找到答案了吗?我在同一条船上。希望设置日历样式,但需要自动更新事件。用户不会直接访问该应用程序(它将显示在数字标牌上),所以我真的负担不起访问数据的整个 OAuth 过程。
  • 已经有一段时间了,但是我不得不代理请求,然后我不确定我使用了什么身份验证方法,但我确实使用了 Office 365 库,并创建了一个包装类来获取正是我需要使用的。
  • 太棒了。谢谢。我最终将他们的 SOAP api 与包装器一起使用。
  • @KFE 你是怎么做到的?我在同一条船上。你能详细说明一下吗?

标签: rest oauth calendar office365


【解决方案1】:

Office 365 API 需要 Oauth2 才能运行。如果您使用 Visual Studio 开发您的应用程序,Visual Studio + OWIN 中间件的 O365 工具将为您处理大量的 oauth 工作。

如果绝对不能选择 oauth,我会考虑改用 EWS API,它可以使用基本身份验证(有关 MSDN 上 here 的更多信息)。

【讨论】:

  • OAuth 绝对是一种选择。事实上,我对使用库比手动解析 HTTP 响应更感兴趣。
  • 这太好了,谢谢。您能否提供更多关于为您在第一个选项中讨论的场景设置 OWIN 所需的信息?此外,如果允许基本身份验证,我确实喜欢使用 EWS API 的想法。阅读他们的文档,他们提到需要订阅开发人员站点(我认为这已纳入商业高级版,我没有),所以我认为基本身份验证不需要这样做。代码示例非常复杂。您知道我在哪里可以找到基本身份验证 + 查询的示例(例如日历事件)吗?
  • FWIW 我非常强烈建议不要对任何事情使用基本身份验证,因为即使是最基本的中间人攻击也会让你的信任大开。我还非常强烈地建议for尽可能使用 O365 API 而不是 EWS,因为它不会像 EWS API 那样限制您只访问 Exchange 数据。 OWIN 中间件框架是一个简单的 nuget 包,您可以将其包含在您的项目中。我们有一个示例,说明如何使用 OWIN 通过位于 github.com/OfficeDev/O365-WebApp-MultiTenant 的 O365 API 访问联系人数据(因此,来自交换的信息)
  • 此外 - re:开发人员网站 - 如果您正在为 SharePoint 开发应用程序或想要使用基于 SP 的应用程序目录为 Office 部署应用程序,您只需要一个开发人员网站。如果您想使用 O365 API,则不需要开发站点(我知道这很令人困惑)。最后 - 要了解使用 O365 工具获取日历数据的情况,请查看位于 apisandbox.msdn.microsoft.com 的 O365 API 沙箱。这就像 JavaScript 中的六行代码,如果您是租户管理员,您可以针对您的 O365 数据运行沙箱。
猜你喜欢
  • 2021-10-21
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
相关资源
最近更新 更多