Microsoft graph api:有些用户在使用我的应用程序时收到 403,而其他用户则没有,为什么?

问题描述 投票:0回答:1

问题

我明白了

Microsoft\Graph\Exception\GraphException: [0]: 收到 403 呼叫 到 https://graph.microsoft.com/beta/me/chats/[id]@unq.gbl.spaces/members

我不明白为什么。


研究

Azure 中的权限

异常如何出现在我的队列中

附加信息

需要明确的是:我们公司其他用户的相同请求正在发挥作用,所以这并不总是失败。值得注意的是,以 Chat 开头的权限来自于 graph api 的 beta 版本。此外,检索有关用户的信息(ownUser getGivenName)适用于所有用户。

应用程序范围

申请中定义的范围是:

openid 轮廓 离线访问 用户读取 邮箱设置.read 日历.readwrite Chat.ReadBasic 聊天.阅读 聊天.读写

服务器响应

回复完整:

{
    "error": {
        "code": "Forbidden",
        "message": "Forbidden",
        "innerError": {
            "date": "2021-05-04T12:05:41",
            "request-id": "xxxxxxx-f7ea-4912-a23b-676002d0912d",
            "client-request-id": "xxxxxxx-f7ea-4912-a23b-676002d0912d"
        }
    }
}

响应头也没有透露任何内容:

也尝试过

我还尝试重新访问 https://login.microsoftonline.com/common/adminconsent?client_id=[id] 并给予我(管理员)同意,但这不会改变任何东西。

JWT 代币

我还解码了工作用户 jwt 令牌和非工作用户 jwt 令牌,并且它们配置了相同的 scp (范围)。 这是差异

使用的端点

  • /me/chats
  • /me
  • /me/chats/$chatId/messages
  • /me/chats/$chatId/members
php permissions microsoft-graph-api
1个回答
0
投票

只是一些观察和解决方法,以帮助通过谷歌看到这篇文章的其他人:

  • 只有

    /me/chats/$chatId/members
    失败了,没有明显的原因。这可能是测试版实施中的一个错误。也许最好使用
    $expand
    参数来查看它们来缓解这个问题。

  • 对于另一组用户,使用

    php sdk
    检索与端点 /me/chats 的所有聊天也失败,并使用 推荐代码

  public function listChats(): array
    {
        $graph = $this->getGraph();
        $chats = [];
        $response = $graph->setApiVersion("beta")
            ->createCollectionRequest("GET", "/me/chats")
            ->setReturnType(Chat::class);
        while (!$response->isEnd()) {
            $chats = array_merge($chats, $response->getPage());
        }

        return $chats;
    }

因为 while 循环永远不会停止。

@odata.nextLink
始终出现在这些用户的响应中。可能也是一个错误,因为 SDK 会根据设计检查它是否存在。

  $maxRequests = 10;
   while (!$response->isEnd() && $maxRequests > 0) {
     $chats = array_merge($chats, $response->getPage());
     $maxRequests--;
   }

© www.soinside.com 2019 - 2024. All rights reserved.