【问题标题】:Office 365 REST API - Value Returning NULL (only specific users)Office 365 REST API - 返回 NULL 的值(仅限特定用户)
【发布时间】:2022-03-05 17:11:23
【问题描述】:

我正在为此烦恼,也许有人有想法。我们有一个在 Azure 中注册的 Web 应用程序,它从 Office 365 API 中获取与登录用户帐户相关的日历和事件数据。

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

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

  • 工作用户和非工作用户的订阅类型相同 (E1)。
  • 处理调用的代码没有改变,没有“特定用户”经历的额外过程。我们的本地系统对它们都一视同仁。
  • 没有环境或变量差异。一些帐户将检索他们的事件,其他帐户得到一个 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/) 上以用户身份登录,系统将在每种情况下都返回正确的结果。这让我相信 Office365 传递给我们的访问令牌是不正确的,但它似乎只在某些情况下失败,这些用户之间没有共同的链接。

我正在尝试找出可能发生这种情况的任何可能原因。如果有人有任何想法,我会全力以赴。

【问题讨论】:

    标签: php oauth office365api


    【解决方案1】:

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

    不过,这可能根本不是您的问题 - 我建议您提供任何其他详细信息,说明身份验证适用的帐户的性质,以及那些不起作用的帐户的性质。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 1970-01-01
        相关资源
        最近更新 更多