Вызов API MS Teams Graph из кода бота приводит к 403 Запрос запрещен - PullRequest
0 голосов
/ 23 января 2019

У меня есть бот с добавленным каналом Cortana. Я настроил подключенную учетную запись Cortana для получения токена доступа к API Graph. Мой бот-код использует этот токен для вызова API MS Teams.

Cortana правильно вызывает моего умелого бота и запрашивает вход пользователя. После успешного входа я подтвердил в коде, что я получаю токен доступа. Используя этот токен, когда мой код бота звонит на https://graph.microsoft.com/v1.0/me/joinedTeams, я получаю ответ:

{
  StatusCode: 403, 
  ReasonPhrase: 'Forbidden', 
  Version: 1.1, 
  Content: System.Net.Http.StreamContent, 
  Headers: {  
      Transfer-Encoding: chunked  
      request-id: b1f83dda-1ce4-4660-9950-d890123f5b27  
      client-request-id: b1f83dda-1ce4-4660-9950-d890123f5b27  
      x-ms-ags-diagnostic: {
          "ServerInfo":{
              "DataCenter":"West US",
              "Slice":"SliceC",
              "Ring":"5",
              "ScaleUnit":"003",
              "Host":"AGSFE_IN_4",
              "ADSiteName":"WUS"
            }
        }  
        Duration: 43.0296  
        Strict-Transport-Security: max-age=31536000  
        Cache-Control: private  
        Date: Wed, 23 Jan 2019 20:13:33 GMT  
        Content-Type: application/json
    }
}

Я установил следующие разрешения в области параметров Oauth канала Cortana, а также в приложении на портале Azure:

  • Mail.Read
  • Mail.Send
  • openid
  • profile
  • User.Read
  • User.ReadBasic.All
  • User.Read.All
  • User.ReadWrite.All
  • Group.Read.All
  • Group.ReadWrite.All (делегированный + заявка)

Тот же вызов через проводник графиков с тем же входом в учетные данные возвращает мне список моих присоединившихся команд.

Что мне здесь не хватает? Как мне отладить это дальше?

enter image description here

1 Ответ

0 голосов
/ 24 января 2019

Прежде чем вы сможете использовать определенные области разрешений, вам необходимо сначала получить «Согласие администратора». Обратите внимание, что это другой процесс, чем «Согласие пользователя». Согласие администратора предшествует согласию пользователя и фактически является администратором, который говорит: «Конечно, пользователи в моем клиенте могут принять области, которые запрашивает ваше приложение». Вы можете найти эту статью на понимающей разницу между согласием пользователя и администратора полезной.

То, как вы выполняете Admin Consent, немного зависит от вашего приложения. Если вы мультитенантное приложение (т. Е. Ваше приложение используется различными организациями), вам необходимо предоставить конкретный URI администратору каждого арендатора, чтобы начать процесс. Для этого процесса я бы посоветовал взглянуть на Получение административного согласия для вашего приложения .

Если вы являетесь приложением с одним арендатором (то есть внутренним корпоративным приложением), то все немного проще. Администратор клиента может просто щелкнуть параметр «Предоставить согласие» на странице регистрации приложения на портале Azure (он находится на странице «Разрешения API» для вашего приложения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...