MSGraph 删除组推送通知:删除事件的更改类型错误

MSGraph Delete Group Push Notifications: Wrong changeType on Delete Events

当我在 Azure AD 门户中执行组删除并设置推送通知 changeType = 'updated,deleted' 时,推送通知会在 10-15 秒内按预期收到并带有正确的资源 ID我删除的组,但 changeType = 'updated'。请参阅下面收到的实际事件:

{
   "value":[
      {
         "changeType":"updated",
         "clientState":"<<redacted>>",
         "resource":"Groups/f0a5993b-5c2d-49cc-bb2f-8cb0060fef8e",
         "resourceData":{
            "@odata.type":"#Microsoft.Graph.Group",
            "@odata.id":"Groups/f0a5993b-5c2d-49cc-bb2f-8cb0060fef8e",
            "id":"f0a5993b-5c2d-49cc-bb2f-8cb0060fef8e",
            "organizationId":"<<redacted>>",
            "eventTime":"2018-11-22T01:47:00.2455823Z",
            "sequenceNumber":636784480202455800
         },
         "subscriptionExpirationDateTime":"2018-11-24T18:13:08.914+00:00",
         "subscriptionId":"d850b120-19bb-4291-b9c4-845ea04dd38d",
         "tenantId":"<<readacted>>"
      }
   ]
}

处理此请求后,无法确定当前组资源是否已被删除。 Graph API 团队中的某个人可以看看 into/resolve 吗?

您删除的群组很可能是 Office 365 group。删除 Office 365 组时,它们会被软删除,表示为 updated 事件,而不是 deleted 更改类型。如果您为 users 订阅 updated,deleted,它也支持软删除,那么在删除用户时您会注意到相同的行为。

(软删除的 Office 365 组可以是 restored within 30 days。相比之下,其他类型的组会立即永久删除且无法恢复。)

如果您将 delta query 与更改通知一起使用(典型的模式是使用 updated 更改事件作​​为触发器以通过增量查询轮询更多更改),软-删除一个组看起来像这样:

GET https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=1yN...
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups",
    "@odata.deltaLink": "https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=1yN...",
    "value": [
        {
            "id": "0ed62d01-7c00-4866-9220-74fdd034eea7",
            "@removed": {
                "reason": "changed"
            }
        }
    ]
}

当软删除的 Office 365 组被永久删除时(自然删除,30 天后,或手动删除,因为有人 permanently deleted it),您将获得预期的 deleted 更改类型在订阅中:

{
    "value": [
        {
            "changeType": "deleted",
            "resource": "Groups/0ed62d01-7c00-4866-9220-74fdd034eea7",
            "resourceData": ...
            ...
        }
    ]
}

在群的delta查询中,群的永久删除表示如下:

GET https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=1yN...
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups",
    "@odata.deltaLink": "https://graph.microsoft.com/v1.0/groups/delta?$deltatoken=1yN...",
    "value": [
        {
            "id": "0ed62d01-7c00-4866-9220-74fdd034eea7",
            "@removed": {
                "reason": "deleted"
            }
        }
    ]
}

其他信息

Office 365 组可以在 Microsoft Graph 中通过其 groupTypes 属性进行识别,如果它是 Office 365 组,它将包含字符串 Unified

GET https://graph.microsoft.com/v1.0/groups/{id}?$select=id,displayName,groupTypes
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups(id,groupTypes)/$entity",
    "id": "0ed62d01-7c00-4866-9220-74fdd034eea7",
    "displayName": "My Office 365 group",
    "groupTypes": [
        "Unified"
    ]
}

可以使用 Microsoft Graph 列出软删除的组:

GET https://graph.microsoft.com/v1.0/directory/deletedItems/microsoft.graph.group

要使用 Microsoft Graph 永久删除软删除对象:

DELETE https://graph.microsoft.com/v1.0/directory/deletedItems/{id}