【问题标题】:Issue with PATCH method of outlook mail REST API returning ErrorAccessDeniedOutlook 邮件 REST API 的 PATCH 方法返回 ErrorAccessDenied 的问题
【发布时间】:2019-02-28 08:22:53
【问题描述】:

我们有一个 Outlook 插件,我们需要使用它的 itemId 更新邮件项目的单值扩展属性。

更新扩展属性的文档Here

我们收到以下 HTTP 调用响应:

请求网址:

PATCH https://outlook.office365.com/api/v2.0/me/messages('{mailItemId}')

回应:

{
    "error": {
        "code": "ErrorAccessDenied",
        "message": "The api you are trying to access does not support item scoped OAuth."
    }
}

进一步调整后,我们发现我们在请求标头中使用的身份验证令牌可能存在问题。我们使用 Outlook 的 getCallbackTokenAsync api 来获取令牌,将 REST 令牌的 isRest 选项设置为 true。在 stack-overflow 中搜索相关问题时,我发现了以下问题:

  1. Can't add attachment to message in outlook add-in using Outlook rest API
  2. Access to Outlook RestAPI from an Outlook web Add-in

这些表明此 api 中可能存在错误,因此它返回项目范围的令牌而不是邮箱范围的令牌。项目范围令牌的有效负载包含 Exchange.Callback.V1 作为版本值,Exchange.Callback.V2 表示邮箱范围令牌。

我们在https://jwt.io/ 上解码了我们的响应令牌,发现返回的令牌确实是一个项目范围的令牌,因此我们无法将扩展属性的更新值推送到邮件项目。还写到这个问题可能会在 16.0.7902.1000 之后的版本中得到解决。不过,我正在 Outlook 的网络浏览器客户端上尝试此操作,但不确定构建版本与我的情况有何相关性。

最近有没有其他人遇到过这种行为,或者是否有任何可能的解决方法?

****************** 编辑 ****************

我遵循了评论中的建议,现在可以执行来自邮递员的补丁请求,但不能从插件内部执行。我在控制台中收到 400 错误请求错误。以下是删除了特定键名和 url 的响应版本。

{ 
  "_body": { 
    "error":{ 
      "code":"RequestBodyRead", 
      "message":"An unexpected instance annotation name '{key name}' was found 
                 when reading from the JSON reader, In OData, Instance 
                 annotation name must start with @."
    } 
  }, 
  "status": 400, 
  "ok": false, 
  "statusText": "Bad Request", 
  "type": 2 
} 

我该如何解决这个问题?

【问题讨论】:

标签: office-js outlook-web-addins


【解决方案1】:

请查看 getCallbackTokenAsync API 文档:docs.microsoft.com/en-us/office/dev/add-ins/reference/...。您需要在其清单中指定 ReadWriteMailbox 权限。

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2019-10-27
    • 1970-01-01
    • 2015-06-15
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多