Office 365 REST API - 值返回 NULL(仅限特定用户)

Office 365 REST API - Value Returning NULL (only specific users)

我正在努力解决这个问题,也许有人有想法。我们有一个在 Azure 上注册的 Web 应用程序,它正在从 Office 365 API 中获取与登录用户帐户相关的日历和事件数据。

当用户登录到我们的系统时,我们会从 Office365 API 获取刷新令牌和访问 + ID 令牌。我可以将访问令牌直接发送到服务器,我可以看到用户事件,一切正常。 “基本”oauth 代码是从示例代码 here 中提取的。我们也可以在我们的应用程序中执行此操作,它也能正常工作。

这对某些用户有效,但对其他用户无效。对于这些用户,系统会验证他们的令牌,但会在响应的“值”键中响应 NULL 值。

我们得到的确切服务器响应是这样的,它发生在访问令牌通过身份验证之后:

(string(196) "{"@odata.context":"https : //outlook.office.com/api/v1.0/$metadata#Me/Events","value":[{"error":{"code":"ErrorInternalServerError","message":"Object reference not set to an instance of an object."}}")

(由于信誉原因,在 https 后添加了空格)

如果我以用户身份登录到 oauth 沙箱 (https://oauthplay.azurewebsites.net/),系统将 return 在每种情况下都得到正确的结果。这让我相信 Office365 传递给我们的访问令牌是不正确的,但它似乎只在某些情况下失败,这些用户之间没有共同点 link。

我正在尝试找出发生这种情况的任何可能原因。如果有人有任何想法,我洗耳恭听。

没有太多细节,根据你的描述,我猜想这是你如何注册你的应用程序以与 Azure AD 交互的问题。在某些情况下,与向应用程序注册(或注册为能够使用该应用程序)的 Azure AD 租户不同的用户将通过初始 OAuth 阶段生成访问令牌,但当用于其他 Azure 时AD API,那些令牌不起作用。有关详细信息,请查看 this article(关于这意味着什么的文档有些稀疏。请注意,要在 Azure 管理控制台中打开多租户,您需要注册一个完全限定的域名(FQDN).

尽管如此,这可能根本不是您的问题 - 我建议您提供有关身份验证有效的帐户性质以及无效帐户性质的任何其他详细信息。

好吧,关于为什么会发生这种情况,我还没有找到一个很好的答案,但是我们将端点从 /events/ 更改为 /calendarview/?{params} 并且一切似乎都像魔术一样工作。

知道了这一点,我很想知道为什么 /events/ 只对某些用户有效,对其他用户无效。也许这会对将来的某人有所帮助。