我无法启动Microsoft Graph webhook订阅(特别是邮箱)。在启动订阅时,似乎Microsoft接受我发送的所有参数以配置订阅但未通过总订阅,因为它从我配置的端点收到非2xx响应。
我的端点向Microsoft发送401
的原因是因为包含订阅验证令牌的POST缺少clientState。
我正在使用clientState键值对来验证Microsoft和我的端点之间的所有通信。如果我的端点没有看到正确的clientState,它将返回401
。
关于我可能缺少什么的想法,或者我是否应该以不同的方式解决这个问题?在我看来,允许我的端点接受未经身份验证的GET / POST不是一种选择。
示例请求正文使用POST方法,包括标题中的API密钥:
{
"changeType": "created",
"clientState": "testClientState",
"resource": "users/<UserName>/messages",
"expirationDateTime": "2017-08-10T10:24:57.0000000Z",
"notificationUrl": "<EndpointURL>"
}
从Microsoft返回错误:
"error": {
"code": "InvalidRequest",
"message": "Subscription validation request failed. Must respond with 200 OK to this request.",
"innerError": {
"request-id": "adf7fc7b-6b14-4422-8526-c1391be8dd27",
"date": "2017-08-07T16:24:59"
}
}
我理解一切按预期工作,直到我的端点被发送验证令牌,因为我收到验证令牌但我的端点拒绝它,因为它缺少客户端状态。
Endpoint Log Snippet:
queryStringParameters": {
"validationToken": "<ValidationToken sent by Microsoft>"
}
我的API端点逻辑基于Microsoft的某些开发人员指南。特别是对于订阅创建,我是using this guide。
答案 0 :(得分:1)
我代表Microsoft Graph Web钩子团队......
我们在MS Graph服务日志中验证了您的请求,并确认在订阅验证阶段失败,因为HTTP状态代码=&#39;未授权&#39;来自你的终点......根据你的观察,一切都是正确的......
根据设计,MS Graph Web挂钩不会在订阅验证请求中发送clientState标头。在订阅验证期间请不要期望此标头。