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

Microsoft Graph API订阅验证请求超时问题求助

问题:Microsoft Graph API订阅端点验证超时

我正在尝试创建Microsoft Graph API订阅以接收webhook通知。按照验证要求,Graph API会向通知URL发送携带validationToken的POST请求,我需要返回该令牌完成端点验证。我搭建了如下Spring Boot端点:

@RestController
public class ListenController {

    @PostMapping(value = "/listen", headers = {"content-type=text/plain"})
    @ResponseBody
    public ResponseEntity<String> handleValidation(
        HttpServletRequest request,
        @RequestParam(value = "validationToken") final String validationToken) {
        return ResponseEntity.ok().contentType(MediaType.TEXT_PLAIN).body(validationToken);
    }
}

用Postman直接测试该端点时,能正常返回200 OK响应;但通过Graph API创建订阅时,却收到验证请求超时错误。我在Postman中发起的创建订阅请求如下:

POST https://graph.microsoft.com/v1.0/subscriptions

{
   "changeType": "updated",
   "notificationUrl": "url.com/listen",
   "resource": "/sites/siteID/lists/listId ",
   "expirationDateTime":"2023-11-20T18:23:45.9356913Z",
   "clientState": "secretClientValue"
}

排查与修复建议

  • 参数获取方式错误:Graph API的验证请求中,validationToken是放在请求body里的纯文本(text/plain格式),而非URL参数。你当前用@RequestParam读取URL参数,根本拿不到令牌,导致处理逻辑异常超时。
  • 请求头限制过严:@PostMapping中指定的headers = {"content-type=text/plain"}可能匹配不到Graph API实际发送的请求头(比如可能带编码后缀text/plain; charset=utf-8),建议移除该限制,让端点接收所有Content-Type的请求。
  • 公网可达性问题:确保你的端点能被公网访问,内网地址或被防火墙拦截会导致Graph API无法发起验证请求,引发超时。可以用内网穿透工具测试公网连通性。
  • 响应超时:Graph API要求验证请求必须在5秒内返回响应,端点内任何耗时操作(如日志写入、数据库调用)都可能触发超时,验证逻辑要保持最简。

修正后的端点代码示例

@RestController
public class ListenController {

    @PostMapping("/listen")
    public ResponseEntity<String> handleValidation(@RequestBody String validationToken) {
        return ResponseEntity.ok()
                .contentType(MediaType.TEXT_PLAIN)
                .body(validationToken);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:43