Microsoft Graph,注册架构扩展

Microsoft Graph, Registering a Schema Extension

我正在构建一个使用 Microsoft Graph API 的内部会议室应用程序,我想使用架构扩展来扩展事件 objects。

文档:

然而,当 运行查询注册新的模式扩展时,我收到了这个 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 在 body 中编码,headers 带有 URL https://graph.microsoft.com/beta/schemaExtensions 的授权令牌.

我尝试了不同的 ID,例如 beethere,这导致了命名空间错误,所以我知道这应该可以正常工作。

据我所知,没有其他需要在此处启用的范围权限。这个错误太模糊了,我无法弄清楚什么权限在这里不够。


编辑:作为租户中的管理员在Graph Explorer中手动运行查询,添加了[=47]所需的范围权限=] 和一些额外的以防万一,但是架构扩展注册的查询仍然不起作用,错误消息与应用程序收到的错误消息相同。所以肯定不是我的代码有问题,而是Microsoft Graph API。是否有联系人或方式要求微软调查此问题?

这个创建 REST 的模式扩展对我来说效果很好。请确保令牌包含 Directory.AccessAsUser.All 权限。您可以从 site.

解析令牌检查其中的 scp 声明

Directory.AccessAsUser.All 只是一个委托权限(它必须被委托,因为它授予对基于目录的 API 的访问权限作为登录用户的访问权限)。它没有出现在角色声明中,因为它不是应用程序权限。

据我所知,您不能使用应用程序流程(客户端凭据)创建架构扩展,您需要使用 "code authorization" 流程。如果这是一项要求,请告诉我们。此外,我们很想知道您是否希望在应用程序注册过程中体验架构定义注册...

此外,您当前无法通过 Graph Explorer 创建架构扩展定义(或管理它)。要创建定义,您必须是创建扩展定义的应用程序的管理员或所有者,并且创建请求也必须来自该应用程序(不能是图形浏览器)。我们可能会考虑放宽这最后一个限制条件。

如果您想查看此代码片段,可在此处获取(尽管它是 UWP c# 应用程序,而非 JS):https://github.com/microsoftgraph/uwp-csharp-snippets-rest-sample.

架构扩展现已正式发布,可在 v1.0 端点中使用。

希望这对您有所帮助,

Graph Explorer 能够添加扩展。 您需要在您的租户中创建一个应用程序,并将负载中的所有者设置为您的应用程序的客户端 ID。

more on this