2

我正在尝试使用 Microsoft Graph 发布或修补教育课程,但总是出错。

要求

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

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

应用权限

更具体的所需权限:名册许可

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

  • 获得应用程序的管理员同意https://login.microsoftonline.com/myTenant/adminconsent?client_id=myClientID&redirect_uri=MyRedirectURI

  • 获取授权码https://login.microsoftonline.com/myTenant/oauth2/authorize?client_id=myClientID&response_type=code&redirect_uri=MyRedirectURI&response_mode=query&resource=https://graph.microsoft.com/

  • 获取访问令牌

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

  • ......
  • EduRoster.Read
  • EduRoster.ReadBasic
  • EduRoster.ReadWrite
  • ...

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

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

4

1 回答 1

2

此 API 需要“应用程序”而不是“委托”范围。正如您所提到的,它特别需要EduRoster.ReadWrite.All范围。

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

  • 授权码授予 = 委托
  • 隐式赠款 = 委托
  • 客户凭证授予 = 申请

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

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

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

于 2018-06-21T15:46:21.443 回答