Office js outlook mail REST API的修补程序方法返回ErrorAccessDenied时出现问题

Office js outlook mail REST API的修补程序方法返回ErrorAccessDenied时出现问题,office-js,outlook-web-addins,Office Js,Outlook Web Addins,我们有一个outlook外接程序,需要使用邮件项目的itemId更新其单值扩展属性 更新扩展属性的文档: 我们得到了HTTP调用的以下响应: 请求Url: PATCH https://outlook.office365.com/api/v2.0/me/messages('{mailItemId}') { "error": { "code": "ErrorAccessDenied", "message": "The api you are trying t

我们有一个outlook外接程序,需要使用邮件项目的itemId更新其单值扩展属性

更新扩展属性的文档

我们得到了HTTP调用的以下响应:

请求Url:

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."
    }
}
响应:

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。在堆栈溢出中搜索相关问题时,我发现了以下问题:

  • 这表明该api中可能存在一个bug,因此它返回一个项目范围的令牌,而不是邮箱范围的令牌。项目范围内令牌的有效负载包含
    Exchange.Callback.V1
    作为版本值,对于邮箱范围内令牌,包含
    Exchange.Callback.V2

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

    最近有没有其他人面临过这样的行为,或者有没有可能解决这个问题

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

    我遵循了评论中的建议,现在可以从postman执行补丁请求,但不能从外接程序中执行。我在控制台中收到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 
    } 
    
    

    我如何解决这个问题

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

    请查看getCallbackTokenAsync API文档:。您需要在其清单中指定ReadWriteEmailBox权限。啊,对了!这解决了我的问题。谢谢你的帮助。:)