我正在尝试向Microsoft Graph beta教育端点发出请求以获取list of assignments for a class。
正在提出的要求是:
/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"
}
}
}
根据文件,这似乎是设计的。权限仅允许用户从其所属的类访问分配。如果我将自己添加到课程中,那么我可以查看其作业。
然而,我想要的是能够查看任何类的作业,而不仅仅是我所属的作业。从permissions reference开始,有一些应用程序权限可以满足我的需求:
EduAssignments.Read.All :阅读带成绩的课程作业。允许该应用为所有用户阅读作业及其成绩。
但是,该端点根本不支持它们。
答案 0 :(得分:2)
根据文档,您无法使用应用权限调用该端点。它需要是用户身份下的委托调用。
应用程序不受支持。
您可以调用/v1.0/education/users/{user-id}/classes
的原因是因为它允许仅使用角色的应用程序调用:
EduRoster.Read.All,EduRoster.ReadWrite.All
你有其中一个,所以成功。
答案 1 :(得分:0)
我有一个类似的问题:当我调用相同的端点时,却收到以下响应:
找不到段“ assignments”的资源。
尽管我利用同一个客户端来吸引老师和成员,但这些端点都可以正常工作。