Outlook邮件REST API的PATCH方法问题返回ErrorAccessDenied

问题描述 投票:1回答:1

我们有一个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."
    }
}

在进一步调整时,我们发现我们在请求标头中使用的auth令牌可能存在问题。我们使用Outlook的getCallbackTokenAsync api来获取令牌,并将REST令牌的isRest选项设置为true。在堆栈溢出中搜索相关问题时,我发现了以下问题:

  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/上解码了我们的响应令牌,发现返回的令牌确实是一个项目范围的令牌,因此我们在将更新的extended-property值推送到邮件项目时被阻止。还写了这个问题可能会在16.0.7902.1000之后的版本中得到解决。我在Outlook的Web浏览器客户端上尝试这个,但不确定构建版本在我的情况下是如何相关的。

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

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

我按照评论中的建议,现在能够从邮递员执行补丁请求,但不能从加载项中执行。我在控制台中收到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个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.