使用 MSGraph 发布或修补 EducationClass 时出错

Error when Posting or patching EducationClass with MSGraph

我正在尝试使用 Microsoft Graph POST 或 PATCH 教育 class,但总是出错。

要求

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"
  }
}

我的应用程序具有创建教育所需的权限 class。 (为了测试,我的应用程序拥有所有可能的应用程序和委托权限)。发布用户、群组等没有问题。

更具体需要的权限:

在 AD 门户中分配权限后,我执行了以下操作:

一切顺利。 获得访问令牌后,我有以下范围:

Graph 文档说您需要权限 Application EduRoster.ReadWrite.All

还在 Graph Explorer 中测试了 POST 和 PATCH,但得到了相同的响应。

此 API 需要 "Application" 而不是 "Delegated" 范围。正如您提到的,它特别需要 EduRoster.ReadWrite.All 范围。

将哪些范围应用于令牌完全取决于您用于获取令牌的 OAuth Grant:

  • 授权码授予 = 委托
  • 隐性资助 = 授权
  • 客户端凭据授予 = 应用程序

您没有在访问令牌中获得此范围的原因是您正在使用授权代码授予 (response_type=code),这将始终导致分配授权范围。

为了进行此调用,您需要使用 Client Credentials grant 获取令牌。

您可能还会发现这篇文章有帮助(完全公开,我是作者):Application vs Delegated Scopes