首页 > 解决方案 > Microsoft Graph Api - 订阅后出现内部服务器错误

问题描述

我正在尝试通过https://graph.microsoft.com/v1.0/subscriptions端点将订阅请求发布到图形 api。但是,我不断收到此错误:

   "code": "ExtensionError",
        "message": "Operation: Create; Exception: [Status Code: InternalServerError; Reason: Expected 1 response for tenant lookup for tenant id ... but received 0]

我的请求:

{
    "changeType": "created,updated",
    "notificationUrl": "https://.../notification",
    "resource": "communications/callRecords",
    "expirationDateTime": "2021-03-24T18:23:45.9356913Z",
    "clientState": "secretClientValue"
}

我能够以我的租户 ID 作为 grant_type = client_credentials (OAuth 2.0 客户端凭据授予流程)获取令牌。尽管令牌创建成功,但我不明白为什么我的租户在订阅时会出错。我究竟做错了什么?请帮忙!

谢谢。

更新: 我的应用程序的权限:

  1. Calendars.ReadWrite 应用程序
  2. CallRecords.Read.All 应用程序
  3. Directory.ReadWrite.All 应用程序
  4. OnlineMeetings.Read.All 应用程序

授予所有人管理员同意。

标签: microsoft-graph-apitokensubscriptionmicrosoft-graph-teams

解决方案


我假设既然您说“grant_type = client_credentials(OAuth 2.0 客户端凭据授予流程)”,那么您正在使用 Delegated CallRecords.Read.All 权限。

如果您阅读此页面,它会说 CallRecord 订阅仅支持 Application CallRecords.Read.All 权限。因此,您必须使用应用程序客户端进行身份验证,而不是客户端凭据。

===== 更新 =====

根据评论,我可以猜出我可能存在的一些问题:

由于“免费”的 azure 帐户没有团队许可证,因此有人猜测订阅调用会因某些原因而失败。这可能就是为什么它会因为奇怪的消息而失败。

另一种设置是您的 azure 应用程序位于“免费”帐户中,并且订阅适用于另一个租户(例如您的工作租户)。为此,您需要:

  • 天蓝色应用程序设置为多租户
  • 管理员在工作租户中获得管理员同意
  • 在生成令牌调用中,“myTenantId”必须是工作租户的租户 ID

推荐阅读