我明白了
Microsoft\Graph\Exception\GraphException: [0]: 收到 403 呼叫 到 https://graph.microsoft.com/beta/me/chats/[id]@unq.gbl.spaces/members
我不明白为什么。
需要明确的是:我们公司其他用户的相同请求正在发挥作用,所以这并不总是失败。值得注意的是,以 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 令牌,并且它们配置了相同的 scp (范围)。 这是差异
/me/chats
/me
/me/chats/$chatId/messages
/me/chats/$chatId/members
只是一些观察和解决方法,以帮助通过谷歌看到这篇文章的其他人:
只有
/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--;
}