我正在尝试创建 Microsoft Graph API 订阅以接收 Webhook 通知。为了验证终结点,Microsoft Graph API 将 POST 请求中的验证令牌发送到通知 URL。我已经设置了一个端点来使用令牌响应此验证请求,但我遇到了订阅验证请求超时的问题。
@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);
}
}
当我通过直接发送 POST 请求(例如通过 Postman)测试端点时,它返回预期的 200 OK 响应。但是,当我通过 Graph API 创建订阅时,我收到超时错误。
这是我在 Postman 中使用的发布请求:
发布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"
}
不确定是否对你有帮助,但我在资源不正确以及expirationDateTime超过3天时经历过这种行为(我们不能订阅超过3天)
根据您提出的场景,一个可能的问题是您的 notificationURL 端点无法公开访问以供 Graph 回调和验证,因此 Graph 正在发送超时。
作为故障排除步骤,您能否验证您的端点是否可以从另一个外部位置访问?像这样的外部 ping 工具可能会有所帮助:https://www.site24x7.com/ping-test.html