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}
当我在 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}