Microsoft Graph Rest API:"notification endpoint validation" 是如何工作的?
Microsoft Graph Rest API: how does "notification endpoint validation" works?
阅读文档我看到... "The client must provide a response with the following characteristics within 10 seconds:"
- 一个 200(正常)状态代码。
- 内容类型必须是text/plain。
- 正文必须包含 Microsoft Graph 提供的验证令牌。
我在客户端收到的请求是
/?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+ef492401-75ec-4ac8-b87a-89d0b81ae977
所以我给的回复是
$responseCode = 200;
http_response_code($responseCode);
header('Content-type: text/plain');
echo $response = $_GET['validationToken'];
翻译后,..是:
Validation: Testing client application reachability for subscription Request-Id: ef492401-75ec-4ac8-b87a-89d0b81ae977
为什么我会收到此回复?
< HTTP/1.1 400
< {
< "error": {
< "code": "InvalidRequest",
< "message": "Subscription validation request failed. Must respond with 200 OK to this request.",
< "innerError": {
< "request-id": "ef492401-75ec-4ac8-b87a-89d0b81ae977",
< "date": "2020-02-04T14:50:35"
< }
< }
< }
问题出在这里:
$request["notificationUrl"] = $conf['NotificationURL'];
$request["lifecycleNotificationUrl"] = "https://webhook.azurewebsites.net/api/lifecycleNotifications";
配置中的第二个 URL 不存在。如果调用,return 400。正确的配置应该是:
$request["notificationUrl"] = $conf['NotificationURL'];
$request["lifecycleNotificationUrl"] = $conf['NotificationURL'];
那就解决问题了。
阅读文档我看到... "The client must provide a response with the following characteristics within 10 seconds:"
- 一个 200(正常)状态代码。
- 内容类型必须是text/plain。
- 正文必须包含 Microsoft Graph 提供的验证令牌。
我在客户端收到的请求是
/?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+ef492401-75ec-4ac8-b87a-89d0b81ae977
所以我给的回复是
$responseCode = 200;
http_response_code($responseCode);
header('Content-type: text/plain');
echo $response = $_GET['validationToken'];
翻译后,..是:
Validation: Testing client application reachability for subscription Request-Id: ef492401-75ec-4ac8-b87a-89d0b81ae977
为什么我会收到此回复?
< HTTP/1.1 400
< {
< "error": {
< "code": "InvalidRequest",
< "message": "Subscription validation request failed. Must respond with 200 OK to this request.",
< "innerError": {
< "request-id": "ef492401-75ec-4ac8-b87a-89d0b81ae977",
< "date": "2020-02-04T14:50:35"
< }
< }
< }
问题出在这里:
$request["notificationUrl"] = $conf['NotificationURL'];
$request["lifecycleNotificationUrl"] = "https://webhook.azurewebsites.net/api/lifecycleNotifications";
配置中的第二个 URL 不存在。如果调用,return 400。正确的配置应该是:
$request["notificationUrl"] = $conf['NotificationURL'];
$request["lifecycleNotificationUrl"] = $conf['NotificationURL'];
那就解决问题了。