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
И у вас есть один из них, так что это удается.
У меня аналогичная проблема: когда я вызываю ту же конечную точку, но получаю следующий ответ:
Ресурс не найден для сегмента "назначения".
Хотя я использую один и тот же клиент для получения учителей и участников, и эти конечные точки работают.