【发布时间】: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