microsoft-graph-api - Microsoft Graph Webhook 缺少 ClientState

标签 microsoft-graph-api

我在启动 Microsoft Graph Webhook 订阅(尤其是邮箱)时遇到问题。启动订阅时,Microsoft 似乎接受了我发送来配置订阅的所有参数,但整个订阅失败,因为它从我配置的端点接收到非 2xx 响应。

我的端点向 Microsoft 发送 401 的原因是因为包含订阅验证 token 的 POST 缺少 clientState。

我正在使用 clientState 键值对来验证 Microsoft 与我的端点之间的所有通信。如果我的端点没有看到正确的 clientState,它将返回 401

关于我可能缺少什么或者我是否应该以不同的方式解决这个问题有什么想法吗?在我看来,允许我的端点接受未经身份验证的 GET/POST 不是一种选择。

使用 POST 方法的示例请求正文,包括 header 中的 API key :

{
    "changeType": "created",
    "clientState": "testClientState",
    "resource": "users/<UserName>/messages",
    "expirationDateTime": "2017-08-10T10:24:57.0000000Z",
    "notificationUrl": "<EndpointURL>"
}

微软返回错误:

"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"
    }
}

我知道一切都会按预期工作,直到向我的端点发送验证 token ,因为我收到了验证 token ,但我的端点拒绝了它,因为它缺少客户端状态。

端点日志片段:

queryStringParameters": {
    "validationToken": "<ValidationToken sent by Microsoft>"
}

我的 API 端点逻辑基于 Microsoft 的一些开发人员指南。特别是对于订阅创建,我是 using this guide .

这个问题似乎是 also asked but not answered on GitHub

最佳答案

我代表 Microsoft Graph Web hooks 团队...

我们在 MS Graph 服务日志中验证了您的请求,并确认该请求在订阅验证阶段失败,因为您的端点的 HTTP 状态代码 =“未经授权”...到目前为止,根据您的观察,一切都是正确的...

根据设计,MS Graph Web Hook 不会将 clientState header 作为订阅验证请求的一部分发送。请不要在订阅验证期间期望此 header 。

更多信息

  1. 您可能希望收到 clientState 作为验证请求 header 的一部分,因为 Office365 图表会发送它 https://msdn.microsoft.com/en-us/office/office365/api/notify-rest-operations 。 Office 365 Graph 与 MS Graph 不同...
  2. https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/api/subscription_post_subscriptions 中观察到此问题的一些文档改进...示例发布者通知有效负载,这是在成功订阅之后与订阅验证一起提及...我们修复了这些问题。

关于microsoft-graph-api - Microsoft Graph Webhook 缺少 ClientState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45554621/

相关文章:

Python requests 库不工作,而 cURL 工作

azure - B2B 用户无法使用 v2.0 端点和 MSAL 身份验证流程登录租户

timezone - microsoft graph createreply 时区错误

office365api - 使用 Microsoft Graph 运行宏

javascript - 是否可以在没有服务器的情况下对 Microsoft Graph 进行身份验证?

azure - 使用标准用户帐户根据订阅下载邮件

javascript - AADSTS50058 : A silent sign-in request was sent but no user is signed in

azure - 如何使用 beta Microsoft Graph API 在规划器中删除带有外部引用的任务详细信息引用

java - 如何序列化和反序列化 IGraphServiceClient 客户端对象?

sharepoint - 使用 Microsoft Graph API 下载 Sharepoint 文件未显示内容属性