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

时间:2019-02-28 08:22:53

标签: office-js outlook-web-addins

我们有一个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来获取令牌,其中isRest选项对于REST令牌设置为true。在堆栈溢出中寻找相关问题时,我发现了以下问题:

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

这些建议此api中可能存在一个错误,因为该错误会返回以项目为范围的令牌而不是以邮箱为范围的令牌。项目范围令牌的有效负载包含Exchange.Callback.V1作为版本值,Exchange.Callback.V2用于邮箱范围的令牌。

我们在https://jwt.io/上解码了响应令牌,发现返回的令牌确实是一个范围限定的项目,因此,在将扩展属性的更新值推送到邮件项目时,我们被阻止了。还写道,此问题可能在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 
} 

我该如何解决?

1 个答案:

答案 0 :(得分:1)

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