MS GRAPH API - 创建订阅 - 403 错误 - 调用方无权访问资源

MS GRAPH API - CREATE SUBSCRIPTIONS - 403 ERROR - Caller does not have access to resource

背景:

您好,我正在尝试将 ms 图 API 与 ROPC 身份验证结合使用(其他身份验证方法无效,因为我需要非交互式登录才能获得委派权限)以方便发送回频道消息和来自特定 Teams 频道和我的聊天应用程序。此过程正在处理 loading/sending 消息,但要获得实时更新,看起来我需要能够订阅资源(传出的 webhooks 需要提及,这不是我想要的,尽管我可以设置它并且有效)。

问题:

要订阅资源(ms teams 频道),我使用以下代码:

  const token = VALID_TOKEN_HERE // from ROPC auth flow
  const url = `https://graph.microsoft.com/beta/subscriptions`
  const subscription = {
    changeType: 'created,updated',
    notificationUrl: `${MY_ENDPOINT}/api/teams/events`,
    resource: `teams/${MY_TENANT_ID}/channels/${MY_CHANNEL_ID}/messages`,
    expirationDateTime: moment().add(1, 'hours'),
    includeResourceData: false,
  }
  const config = {
    headers: {
      Authorization: `Bearer ${token}`
    }
  }

  const response = await axios.post(url, subscription, config).catch(e => console.log(e) )

发布到此 url 后,我从 Teams 取回验证令牌请求到我的 notificationUrl 路由,其设置如下:

    router.post('/teams/events', async (req, res) => {
        if (req.query.validationToken) {
          res.set('Content-Type', 'text/plain');
          return res.status(200).send(req.query.validationToken);
        }

    // code that does things with notification below

错误:

但是,最初创建订阅的请求失败了,我得到以下信息:

'Operation: Create;Exception: [Status Code: Forbidden;Reason: Caller does not have access to '/teams('TEAM_ID_HERE')/channels('CHANNEL_ID_HERE')/消息资源]'

其他信息: 这是一个标准(非私人)频道,我的用户是会员

我在获取授权令牌时请求这些权限 'ChannelMessage.Read.All Group.ReadWrite.All Directory.ReadWrite.All ChannelMessage.Send user.read openid profile offline_access'

My API permissions look like this

我缺少什么才能创建订阅?

在尝试使其在 Microsoft Graph Explorer 上运行后,我意识到我尝试访问的资源 url 路径的 ID 错误。

团队/${MY_TENANT_ID}/频道/${MY_CHANNEL_ID}/消息

应该是

团队/${MY_GROUP_ID}/频道/${MY_CHANNEL_ID}/消息

这是错误的来源,更改 ID 修复了它。