1

我正在为此拉扯头发,也许有人有想法。我们有一个在 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 传递给我们的访问令牌是不正确的,但它似乎只在某些情况下失败,这些用户之间没有共同的链接。

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

4

2 回答 2

0

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

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

于 2015-09-12T03:59:38.623 回答
0

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

知道了这一点,我很想知道为什么 /events/ 只适用于某些用户而不适用于其他用户。也许这将有助于将来的某人。

于 2015-09-15T17:38:34.130 回答