我尝试为Azure用户数据(https://docs.microsoft.com/en-us/graph/webhooks)中的更改设置通知。
我将请求从本地客户端发送到Azure Graph API,并且在请求的有效负载中有一个公共可用的服务器(带有SSL)作为通知URL。
Azure现在将发帖请求发送到我的服务器(如文档中所示-确切的发帖请求,请参见下文),然后我尝试发送我回来的令牌(如文档中所示)。但是我总是收到以下错误消息“订阅验证请求失败。响应必须与validationToken查询参数完全匹配。”
来自Azure的发布请求:
Path: /?validationToken=Validation%3a+Testing+client+application+reachability+for+subscription+Request-Id%3a+3b3f9821-ce3f-23d9-879b-00a23f3
Body: is empty
我尝试了路径的每个部分和编码(就像请求ID或整个路径一样),但是我总是收到错误消息。那么发回什么是正确的事情?
答案 0 :(得分:2)
首先,应将收到的验证令牌视为不透明值并返回不变,并且错误INSERT INTO sandwich_parts (part) values (':value')
INSERT INTO sandwich_parts (part) values ('jam')
INSERT INTO sandwich_parts (part) values (':value')
INSERT INTO sandwich_parts (part) values ('bread')
INSERT INTO sandwich_parts (part) values (':value')
INSERT INTO sandwich_parts (part) values ('peanut butter')
试图告诉您某些更改。
由于验证令牌是作为URL查询参数提供给您的,因此在返回代码之前,请确保在代码中使用正确解码的值。
以下是Microsoft Docs的相关文档:Notification endpoint validation
Subscription validation request failed. Response must exactly match validationToken query parameter
其他要求(来自同一参考文献):
代码示例
ASP.NET MVC Sample-专门查看NotificationController.cs文件
POST https://{notificationUrl}?validationToken={opaqueTokenCreatedByMicrosoftGraph}
Node.js code sample-专门研究listen.js
[HttpPost]
public async Task<ActionResult> Listen()
{
// Validate the new subscription by sending the token back to Microsoft Graph.
// This response is required for each subscription.
if (Request.QueryString["validationToken"] != null)
{
var token = Request.QueryString["validationToken"];
return Content(token, "plain/text");
}
答案 1 :(得分:0)
您应该从查询字符串中返回validationToken
,并带有一个HTTP 200
响应代码。您还必须在几秒钟内执行此操作,否则该图将使请求失败,并且创建订阅的调用将失败。
以下是ASP.NET Web API 2中验证端点的示例:
public ActionResult<string> Post([FromQuery]string validationToken = null)
{
if(!string.IsNullOrEmpty(validationToken))
{
Console.WriteLine($"Token: '{validationToken}'");
return Ok(validationToken);
}
}