Microsoft Webhooks订阅验证失败:通知端点未触发请求求助
日历订阅API报错排查:Subscription validation request failed
调用Microsoft Graph日历订阅API时收到错误:
Subscription validation request failed. Notification endpoint must respond with 200 OK to validation request。已实现notificationUrl返回带validationToken的200响应,但服务器日志显示该端点未收到验证请求;确认notificationUrl可正常访问,应用权限齐全,且能正常调用me/calendar、创建事件、GET subscriptions等其他Graph API,唯独POST subscriptions失败。
以下是几个大概率被遗漏的排查点:
- 强制检查HTTPS与标准端口:Graph要求通知端点必须使用HTTPS协议,且端口必须是标准的443,自定义HTTPS端口会被直接拒绝发起验证请求。哪怕你本地能访问非标准端口的服务,Graph也不会发起请求。
- 排查防火墙/反向代理拦截:如果你的部署环境有WAF、防火墙或反向代理,要确认规则没有拦截Graph的请求——比如部分安全策略会拦截未知来源的GET请求,或者误将Graph的IP段加入黑名单,导致验证请求根本到不了你的服务器。
- 核对订阅请求参数的正确性:
- 确认
notificationUrl拼写完全正确,无多余斜杠、空格,若服务器路径区分大小写,要保证路径大小写完全匹配; changeType必须填日历订阅支持的值(如created,updated,deleted),无效值会导致Graph直接返回错误,不触发验证;resource参数路径要准确,比如日历订阅需用/me/calendars/{calendarId}/events或/me/events,路径错误会跳过验证步骤。
- 确认
- 验证端点请求方式支持:Graph的订阅验证请求是GET方式,如果你的
notificationUrl端点只处理POST请求,就会导致验证请求无响应,日志自然也捕获不到请求。手动构造带validationToken参数的GET请求测试端点,确认能返回200并返回对应token。 - 检查CDN的拦截规则:如果
notificationUrl前部署了CDN(如Cloudflare),要确认CDN未启用人机验证、缓存静态内容等策略,这些会直接拦截Graph的自动化验证请求。 - 确认Graph API版本:使用
v1.0稳定版API发起订阅请求,beta版可能存在特殊验证逻辑,导致验证流程异常。
内容的提问来源于stack exchange,提问作者Sanket Khot
相关产品推荐
相关产品推荐

