Ошибка при публикации или исправлении 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.

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

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