Добавить члена команды через Graph API. Ответ: 403

У меня есть гостевой пользователь в Azure Active Directory (полностью погашенный — приглашение принято и т. д.), которого я пытаюсь добавить в команду (в Microsoft Teams) через Graph API.

Следуя документации, я установил все необходимые разрешения для своего приложения, однако получаю ответ 403 на свой POST-запрос.

{
    "error": {
        "code": "Forbidden",
        "message": "An unknown error has occurred.",
        "innerError": {
            "date": "2020-12-09T15:52:30",
            "request-id": "X-X-X-X-X",
            "client-request-id": "XXX-XXX-XX-XXX-XXX"
        }
    }
}

Вот мой декодированный токен аутентификации MS ниже, подтверждающий необходимые разрешения, которые должны позволить моему вызову добавить члена команды (приложение также делает несколько других вещей, следовательно, дополнительные разрешения):

{
  ...
  "roles" : [ "Teamwork.Migrate.All", "TeamMember.ReadWriteNonOwnerRole.All", "User.ReadWrite.All", "Directory.ReadWrite.All", "TeamMember.ReadWrite.All", "ChannelMember.ReadWrite.All", "GroupMember.ReadWrite.All", "Channel.Create" ],
  ...
}

Как ни странно, если я использую модуль PowerShell (microsoftteams), он успешно добавляет этого пользователя в нужную команду. Я понимаю, что этот модуль использует Graph API, поэтому я не уверен, почему прямой POST терпит неудачу (пытался найти исходный код модулей, чтобы узнать, какой запрос они используют, но безуспешно).

Чтобы найти решение этой проблемы, я просто использую Postman, поэтому у меня нет кода, которым можно поделиться. Я также могу добавлять участников канала (гостей), создавать каналы и т. д. через API, но эта проблема 403 возникает только при попытке добавить гостя в команду.

Мой пост:

ПОСТ https://graph.microsoft.com/v1.0/teams/{TEAMID}/members

ЗАГОЛОВОК

{
    "Content-Type": "application/json",
    "Authorization": "Bearer {TOKEN}"
}

ТЕЛО

{
    "@odata.type": "#microsoft.graph.aadUserConversationMember",
    "roles": ["member"],
    "[email protected]": "https://graph.microsoft.com/v1.0/users('{GUEST_MEMBER_ID}')"
}

Я пробовал конечные точки версии 1.0 и бета-версии. Оба дают одинаковые 403.

Я буду рад предоставить любую дополнительную информацию, которая может потребоваться.

Любые предложения / информация, чтобы указать мне в правильном направлении, будут очень признательны.

Спасибо.

(1) HTTP 403 указывает на проблему с разрешениями или ролями, которые пользователь пытается выполнить вызов API. Поэтому убедитесь, что у вас есть необходимые роли, назначенные пользователю, чтобы он мог выполнять операцию (кроме ваших разрешений) (2) Вне вашего кода я бы попытался предложить использовать проводник Microsoft Graph/POSTMAN с тем же вызовом Graph API и посмотрите, работает ли он (3) Проверьте свой токен (я вижу, что вы уже это сделали) и его области/разрешения и т. д.

Dev 09.12.2020 20:35

Привет, у вас есть возможность изучить мой ответ? это было полезно для вас?

Carl Zhao 10.12.2020 15:00

Полезен ли вам ответ Карла? Если также есть какие-либо вопросы, вы можете сообщить нам. Если его решение поможет вам, вы можете отметить его ответ как принятый, вы можете помочь большему количеству пользователей форума.

Joseph Xu 16.12.2020 07:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
1 470
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первое, что вам нужно знать, это то, что вы должны быть глобальным администратором или администратором группы и владельцем группы, чтобы добавлять гостей в команду, поэтому вы должны войти в систему как пользователь с ролью администратора, прежде чем вы сможете добавлять гостевых пользователей.

Таким образом, вы не можете использовать разрешение приложения для получения токена, потому что у него нет входа пользователя, вы можете использовать его для добавления пользователей-членов, но его нельзя использовать для добавления гостей. Вам нужно добавить TeamMember.ReadWrite.All delegates permissions, а затем предоставить согласие администратора, а затем вам нужно использовать поток кода аутентификации для получения токена доступа.

У меня такая же проблема, пытаюсь сделать это через PHP. Отлично работает в проводнике Graph. Похоже, мне нужно реализовать делегированные разрешения, что является лавашом - в документах говорится, что «требуется одно из следующих разрешений», так что они неверны? learn.microsoft.com/en-us/graph/api/…

Matt B 20.12.2020 10:10

@MattB Можете ли вы задать новый вопрос и направить меня по ссылке на ваш вопрос?

Carl Zhao 21.12.2020 02:40

У меня есть проблема, поднятая здесь: github.com/microsoftgraph/msgraph-sdk-php/issues/363 - но я думаю, что вопрос выше касается этого, и ваш ответ ставит меня в тупик.

Matt B 21.12.2020 07:55

Другие вопросы по теме