Microsoft Graph - 401, неизвестная ошибка для / бета / образование / классы /

Я пытаюсь сделать запрос к конечной точке бета-тестирования Microsoft Graph, чтобы получить список заданий для класса.

Сделанный запрос:

/beta/education/classes/{class-id}/assignments

Я установил в Azure AD разрешение на чтение заданий и реестр и предоставил их.

Я получаю токен доступа, используя учетные данные клиента с помощью ADAL.NET, и токен, похоже, имеет правильные разрешения приложения для чтения назначений:

{
  "aud": "https://graph.microsoft.com/",
  "iss": "https://sts.windows.net/5cf890b2-6a94-452f-8c29-9f7365b68ba0/",
  "iat": 1520000639,
  "nbf": 1520000639,
  "exp": 1520004539,
  "aio": "...",
  "app_displayname": "...",
  "appid": "...",
  "appidacr": "1",
  "e_exp": 262800,
  "idp": "https://sts.windows.net/5cf890b2-6a94-452f-8c29-9f7365b68ba0/",
  "oid": "bd0154f3-2626-40c1-82a5-39bc8879729c",
  "roles": [
    "EduRoster.Read.All",
    "EduAdministration.Read.All",
    "EduRoster.ReadBasic.All",
    "EduAssignments.Read.All"
  ],
  "sub": "...",
  "tid": "...",
  "uti": "...",
  "ver": "1.0"
}

Однако, глядя в Fiddler, когда я делаю запрос с токеном, он возвращает 401 unauthorized со следующим телом:

{
  "error": {
    "code": "UnknownError",
    "message": "",
    "innerError": {
      "request-id": "bf6cd2e1-53a6-472a-b038-2b035eb8f7db",
      "date": "2018-03-02T14:41:41"
    }
  }
}

Кажется, это только та конечная точка, к которой я не могу получить доступ, так как /v1.0/education/users/{user-id}/classes работает правильно и возвращает правильный ответ.

редактировать

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

Я попытался вернуться к использованию делегированных разрешений. На этот раз scp выглядит следующим образом:

"scp": "AllSites.Read Calendars.Read Contacts.Read Directory.Read.All EduAdministration.Read EduAssignments.ReadWrite EduRoster.Read EduRoster.ReadBasic email Files.Read full_access_as_user Group.Read.All Mail.Read MyFiles.Read Notes.Read Notes.Read.All Notes.ReadWrite.CreatedByApp profile Sites.Read.All Sites.Search.All Tasks.Read TermStore.Read.All User.Read User.Read.All User.ReadBasic.All"

Разрешения EduAssignments предоставляются. Запрос теперь возвращает 403:

{
  "error": {
    "code": "",
    "message": "Access denied.",
    "innerError": {
      "request-id": "02f6d0d4-8867-4e43-94a4-d29f3a1e03f7",
      "date": "2018-03-02T20:47:06"
    }
  }
}

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

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

EduAssignments.Read.All: чтение заданий классов с оценками. Приложение сможет считывать задания и их оценки для всех пользователей.

Однако эта конечная точка просто не поддерживает их.

1 ответ

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

Приложение не поддерживается.

Причина, по которой вы можете позвонить /v1.0/education/users/{user-id}/classes потому что это позволяет только для приложений звонки с ролями:

EduRoster.Read.All, EduRoster.ReadWrite.All

И у вас есть один из них, так что это удается.

У меня аналогичная проблема: когда я вызываю ту же конечную точку, но получаю следующий ответ:

Ресурс не найден для сегмента "назначения".

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

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