#permissions #microsoft-graph-api
Вопрос:
Проблема
Я получаю
MicrosoftGraphИсключениеИсключение GraphException: [0]: Получено 403 для вызова https://graph.microsoft.com/beta/me/chats/[id]@unq.gbl.пробелы/участники
Я не могу понять, почему.
Исследования
разрешения в Azure
как исключение появляется в моей очереди
Дополнительная информация
Просто для ясности: этот же запрос с другими пользователями нашей компании работает, так что это не то, что всегда терпит неудачу. Возможно, стоит отметить, что разрешения, начинающиеся с чата, относятся к бета-версии api graph. Также получение информации о пользователе (имя собственного пользователя getGivenName) работает для всех пользователей.
Области применения приложений
Области, определенные в приложении, являются:
профиль openid пользователя offline_access.чтение почтовых ящиков.чтение календарей.чат для записи.Чат для чтения.Читайте Чат.Читайте запись
Ответ сервера
Ответ полностью:
{
"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 для работающих пользователей, так и нерабочий, и у них настроены одинаковые области действия (области действия). Вот в чем разница
используемые конечные точки
/me/chats
/me
/me/chats/$chatId/messages
/me/chats/$chatId/members
Комментарии:
1. Какие администраторы пытаются получить доступ к событию — и являются ли они участниками или владельцами чата?
2. @Diana Они владельцы. Мое приложение создает резервные копии командных чатов вошедшего в систему пользователя. Он работает для большинства пользователей, только для некоторых он дает 403 запрещенных, в то время как необходимые разрешения остаются прежними. Это настоящий платок для волос.
3. Не могли бы вы поделиться идентификатором запроса для дальнейшей отладки? Я вижу, что вы добавили полный ответ на вопрос.
4. @Diana идентификатор запроса
dd4afa4a-f7ea-4912-a23b-676002d0912d
, я сомневаюсь, что этот идентификатор опасно публиковать каким-либо образом, однако я старался сохранить как можно больше конфиденциальности5. Я думаю, что это вызвано отсутствием
Office365 license
для ваших пользователей. Попробуйте предоставить лицензию Office365 своим пользователям, прежде чем вызывать api.
Ответ №1:
Просто некоторые наблюдения и обходные пути, чтобы помочь другим, кто приходит на этот пост через Google:
- Только тот
/me/chats/$chatId/members
терпит неудачу, без видимой причины. Это может быть ошибкой в бета — версии. Может быть, лучше использовать$expand
аргумент, чтобы увидеть их, чтобы смягчить эту проблему. - для другой подгруппы пользователей получение всех чатов с конечной
/me/chats
точкой с помощью php sdk также завершается ошибкой с рекомендуемым кодом
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() amp;amp; $maxRequests > 0) {
$chats = array_merge($chats, $response->getPage());
$maxRequests--;
}