我正在为此拉扯头发,也许有人有想法。我们有一个在 Azure 中注册的 Web 应用程序,它从 Office 365 API 中获取与登录用户帐户相关的日历和事件数据。
当用户登录我们的系统时,我们会从 Office365 API 获取刷新令牌和访问 + ID 令牌。我可以将访问令牌直接发送到服务器,我可以看到用户事件,一切正常。“基本”oauth 代码是从此处的示例代码中提取的。我们也可以在我们的应用程序中执行此操作,它也可以正常工作。
这适用于某些用户,但不适用于其他用户。对于这些用户,系统会验证他们的令牌,但会在响应的“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 传递给我们的访问令牌是不正确的,但它似乎只在某些情况下失败,这些用户之间没有共同的链接。
我试图想出任何可能发生这种情况的原因。如果有人有任何想法,我会全力以赴。