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
相关产品推荐
相关产品推荐

