首页 文章

Microsoft Graph - 401,/ beta / education / classes /的未知错误

提问于
浏览
3

我正在尝试向Microsoft Graph beta教育 endpoints 发出请求以获取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"
    }
  }
}

它似乎只是我无法访问的 endpoints ,因为 /v1.0/education/users/{user-id}/classes 正常工作并返回正确的响应 .

Edit

尽管权限看似适用,但似乎 endpoints 由于某种原因不允许应用程序权限 . 我认为这种能力将来会出现 .

我已经尝试过回到使用委派权限 . 这一次,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:阅读成绩分类 . 允许该应用为所有用户阅读作业及其成绩 .

但是,该 endpoints 根本不支持它们 .

1 回答

  • 2

    根据文档,您无法使用应用程序权限调用该 endpoints . 它需要是用户身份下的委托调用 .

    应用程序不支持 .

    您可以调用 /v1.0/education/users/{user-id}/classes 的原因是因为它允许具有角色的仅应用程序调用:

    EduRoster.Read.All,EduRoster.ReadWrite.All

    你有其中一个,所以成功 .

相关问题