You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法接收Microsoft Graph变更通知:Azure AD用户删除事件无响应

让我帮你排查一下为什么没收到用户删除的通知,整理了几个常见问题点,你可以逐一检查:

1. 先确认时间计算的小笔误(虽然后续响应时间正常,但还是核对下)

看你代码里计算三天后时间的片段:

const threeDaysLater = new Date(now.getTime() + 3 * 24 * 58 * 60 * 1000);

这里的58应该是60吧?不过从你返回的expirationDateTime来看是正确的,可能是输入时的手误,但如果实际运行代码确实是58的话,订阅会提前过期,这点要确认。

2. 软删除和硬删除的事件触发逻辑不一样

Azure AD的用户删除分两种情况,对应不同的事件:

  • 软删除:用户被移到回收站,实体并没有真正删除,只是accountEnabled设为false、新增deletedDateTime属性,这种情况触发的是updated事件,而非deleted事件。
  • 硬删除:从回收站永久删除用户,这时候才会触发deleted事件。

你提到两种删除都试了没收到通知,那接着往下排查其他点。

3. 应用权限是否达标

创建用户订阅需要确保你的应用有正确的Graph API权限:

  • 必须申请应用权限(不是委派权限),因为订阅是后台运行的,不需要用户登录。
  • 至少需要Subscription.ReadWrite.All权限创建订阅,同时需要Directory.Read.All权限读取用户数据并接收事件。
  • 这些权限必须经过管理员同意,不然就算订阅能创建,也收不到事件通知。
4. 通知URL的可用性问题

虽然用了ngrok,但要确认:

  • 用户删除操作执行时,ngrok隧道是否还处于活跃状态?如果隧道断开或者重新生成了URL,订阅里的notificationUrl就失效了。
  • 你的/api/azure/webhook端点是否支持POST请求?Graph会发送POST格式的通知,要确保端点没有被CORS规则、防火墙拦截。
  • 可以用Postman之类的工具手动模拟一个Graph通知请求发送到你的端点,测试是否能正常接收。
5. 检查订阅状态和资源路径
  • 你订阅的users资源路径是对的,但可以用GET /subscriptions/{id}请求确认订阅是否处于正常状态,有没有过期或被取消。
  • 确认没有其他同资源的订阅存在冲突,比如重复订阅可能导致通知异常。
6. 辅助排查:查看日志
  • 去Azure AD的审核日志里检查用户删除操作是否确实执行成功。
  • 你的端点是否有日志记录?看看有没有Graph发送的请求被拦截或者返回了错误状态码(Graph要求通知端点返回202 Accepted,如果返回错误,可能会停止发送通知)。

内容的提问来源于stack exchange,提问作者Andrew Rasmussen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:54:05