Я получаю неполный вывод из API Graph
Я пишу интеграцию команды-слабины. Суть в том, чтобы определить наши сдвиги в командах MS и изменить описания некоторых каналов Slack в зависимости от того, кто находится на смене.
В любом случае, конец Slack уже готов, но у меня много проблем с командами и их API.
Прежде всего, это мой основной ресурс: https://docs.microsoft.com/en-us/graph/api/schedule-list-shifts?view=graph-rest-beta
Итак, вот что я уже сделал.
- Я зарегистрировал своего бота в Azure, и у меня есть идентификатор
- Я дал боту необходимые разрешения
- Я нашел идентификатор группы команд для наших смен
И вот как процесс выполняется вручную:
Перейдите к URL, который даст мне мой код. Я прикрепил картинку вместо большого беспорядка URL
Когда я перехожу по этому URL (не использую Python), я попадаю на страницу, которая заставляет меня подтвердить мой пользователь O365. (Когда Python пытается это сделать, он запрашивает полный вход в систему)
- Затем я перенаправлен на страницу localhost с параметром code=SOMECODEHERE
- Затем я получаю этот код и отправляю его в POST-запросе, используя Postman, чтобы получить мой токен доступа:
- Затем я использую этот токен доступа на предъявителя для смены.
Вот мои проблемы / вопросы:
- Когда я в конечном итоге получаю свой файл JSON со сменами всех членов команды, он показывает сдвиги только на 1 месяц назад и раньше. Ака сегодня 22-04-2019 и последняя смена, которую я вижу, 22-03-2019.
- JSON также не показывает, кто находится на смене или по вызову. Я имею в виду, я вижу, что есть сдвиг, скажем, 20-02-2019, но он не возвращает никаких UID или имен для участников, которые находятся в этой смене. Есть ли способ найти это?
- Есть ли способ получить значение "code=" с помощью python? Он просит его войти в систему (как он просит меня подтвердить мой пользователь O365 - см. 2-е изображение). Мне действительно нужно жестко задавать свои собственные данные для входа, чтобы бот мог перейти на страницу? Это глупо имо. Я знаю, что могу прочитать перенаправленный URL, но даже не могу туда добраться.
1 ответ
Это только ответ на ваш третий вопрос. Я посмотрю, смогу ли я найти кого-нибудь с ответами на первые два.
API, к которому вы обращаетесь, использует делегированные разрешения, то есть вы получаете доступ от имени вошедшего в систему пользователя. Когда пользователь входит в систему, его личность проверяется, и как только это происходит, Azure AD возвращает код, который вы можете обменять на токен доступа. Поэтому, по определению, нет способа получить код без входа пользователя.
Существует другой вид разрешения, разрешение приложения, которое не поддерживается этим API, но если бы оно было, работало бы так, как вы хотите. Я тоже спрошу об этом.