使用 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 门户中分配权限后,我执行了以下操作:
获得应用的管理员同意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.Read基本
- EduRoster.Read写入
- ...
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。
我正在尝试使用 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 门户中分配权限后,我执行了以下操作:
获得应用的管理员同意
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.Read基本
- EduRoster.Read写入
- ...
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。