Ошибка при публикации или исправлении EducationClass с MSGraph
Я пытаюсь ПОСТАВИТЬ или ПАТЧИРОВАТЬ учебный класс, используя Microsoft Graph, но всегда получаю ошибки.
Запрос
https://graph.microsoft.com/V1.0/education/classes
{
"description": "Health Level 1",
"classCode": "Health 501",
"displayName": "Health 1",
"externalId": "11019",
"externalName": "Health Level 1",
"externalSource": "sis",
"mailNickname": "fineartschool.net"
}
отклик
{
"code": "AccessDenied",
"message": "Required scp claim values are not provided.",
"innerError": {
"request-id": "e1183015-d942-491a-9949-4aa73bbef893",
"date": "2018-06-21T08:44:35"
}
}
Мое приложение имеет необходимые разрешения для создания учебного класса. (для тестирования у моего приложения есть все возможные приложения и делегированные разрешения). Размещение пользователей, групп и т. Д. Не проблема.
Более конкретно, необходимое разрешение:
После назначения разрешения на портале AD я сделал следующее:
Получить согласие администратора для приложения
https://login.microsoftonline.com/myTenant/adminconsent?client_id=myClientID&redirect_uri=MyRedirectURI
Получить код авторизации
https://login.microsoftonline.com/myTenant/oauth2/authorize?client_id=myClientID&response_type=code&redirect_uri=MyRedirectURI&response_mode=query&resource=https://graph.microsoft.com/
Получить токен доступа
Все с успехом. После получения токена доступа у меня есть следующие области:
- .....
- EduRoster.Read
- EduRoster.ReadBasic
- EduRoster.ReadWrite
- ...
В графической документации сказано, что вам нужно разрешение. EduRoster.ReadWrite.All
Также проверил POST и PATCH в Graph Explorer, но получил тот же ответ.
1 ответ
Этот API требует "Application", а не "Delegated" областей. Как вы упомянули, это конкретно требует EduRoster.ReadWrite.All
объем.
Какие области применения будут применены к токену, полностью зависит от того, какой OAuth Grant вы использовали для получения токена:
- Код авторизации Грант = делегирован
- Скрытые гранты = делегированы
- Предоставление учетных данных клиента = приложение
Причина, по которой вы не получаете эту область в своем токене доступа, заключается в том, что вы используете грант кода авторизации (response_type=code
), что всегда приводит к назначению делегированных областей.
Чтобы сделать этот вызов, вам необходимо получить токен с помощью гранта Client Credentials.
Вы также можете найти эту статью полезной (полное раскрытие, я автор): Приложение против делегированных областей.