我正在构建一个使用Microsoft Graph API的内部会议室应用程序,我想使用架构扩展来扩展Event对象。
文档:
但是,当运行查询以注册新的架构扩展时,我收到此HTTP响应:
{
"url": "https://graph.microsoft.com/beta/schemaExtensions",
"status": "403 Forbidden",
"headers": {
"request-id": "e1e36210-6c4c-4ed8-afb1-c9ee6f6362ed",
"client-request-id": "e1e36210-6c4c-4ed8-afb1-c9ee6f6362ed",
"x-ms-ags-diagnostic": "{\"ServerInfo\":{\"DataCenter\":\"North Europe\",\"Slice\":\"SliceA\",\"ScaleUnit\":\"001\",\"Host\":\"AGSFE_IN_2\",\"ADSiteName\":\"DUB\"}}",
"duration": "742.4624"
},
"body": {
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "e1e36210-6c4c-4ed8-afb1-c9ee6f6362ed",
"date": "2017-05-10T10:05:37"
}
}
}
}
我可以确认我的应用程序具有Directory.AccessAsUser.All
的先决条件范围权限,并且自添加此权限以来已超过16小时。我还有经过验证的域名,因此根据文档参考,命名空间应该没问题。
我在代码中的API查询:
Outlook.test({
version: 'beta',
resource: 'schemaExtensions',
method: 'POST',
body: {
id: 'thehivegroup_beethere',
description: 'Extension for event presence status',
targetTypes: [ 'Event' ],
properties: [
{ name: 'checkIn', type: 'String' },
{ name: 'checkOut', type: 'String' }
]
}
})
.then(result => console.log(result), err => console.error(err))
这导致POST在主体中编码的JSON和带有授权令牌的标头到URL https://graph.microsoft.com/beta/schemaExtensions
。
我尝试了不同的ID,例如beethere
,导致命名空间错误,所以我知道这应该可以正常工作。
我没有其他范围权限,我需要在此处启用。我错误地认为 特权在这里是不够的。
编辑:在租户中作为管理员在Graph Explorer中手动运行查询,添加了API所需的范围权限以及一些额外的权限,以防万一,但查询注册Schema Extensions仍然不起作用,使用与应用程序接收的相同的错误消息。所以它绝对不是我的代码中的问题,而是Microsoft Graph API。是否有联系方式或方式要求微软调查此问题?
答案 0 :(得分:2)
Directory.AccessAsUser.All仅是委派权限(必须委派它,因为它授予对已登录用户访问权限的基于目录的API的访问权限)。它不会出现在角色声明中,因为它不是应用程序权限。
据我所知,正确地知道,您不能使用应用程序流(客户端凭据)来创建架构扩展,并且您需要使用"代码授权"流。如果这是一项要求,请告诉我们。此外,我们很想知道您是否希望在应用程序注册中看到架构定义注册的体验...
此外,您目前无法通过Graph Explorer创建架构扩展定义(或管理它)。要创建定义,您必须是管理员或创建扩展定义的应用程序的所有者,并且创建请求也必须来自该应用程序(不能是图形浏览器)。我们可以考虑放松这最后一个约束。
如果您想查看此处的代码段(虽然它是UWP c#app,而不是JS):https://github.com/microsoftgraph/uwp-csharp-snippets-rest-sample。
此外,架构扩展现在是GA,可在v1.0端点中使用。
希望这有帮助,
答案 1 :(得分:1)
创建REST的架构扩展适用于我。请确保该令牌包含Directory.AccessAsUser.All
权限。您可以解析令牌,从此site检查其中的scp
声明。
答案 2 :(得分:1)
Graph Explorer可以添加扩展。 您需要在租户中创建一个应用,并将有效负载中的所有者设置为您的应用的客户端ID。