首页 文章

从Outlook JavaScript Api(office.js)调用ExchangeI中UpdateItem中的访问权限被拒绝

提问于
浏览
1

我们使用office JavaScript api开发Outlook加载项,并且需要更新邮件消息的类别 .

尝试使用Exchange EWS调用UpdateItem时,使用加载项令牌 - 它失败了500 .

请参阅:http://pastebin.com/55x2d2Ht的请求和回复

  • 应用程序的清单权限是ReadWriteMailbox(最高)

  • 在OWA / manageapps中选择应用程序时 - 显示"When this adding is clicked, it will be able to: Read, create and update email in your mailbox"

  • 从mailbox.getCallbackTokenAsync尝试了两个令牌并使用makeEwsRequestAsync .

  • EWS GetItem和CreateItem操作成功 - 只有UpdateItem失败

  • 对UpdateItem的响应:500请求的Web方法对此调用方或应用程序不可用 .

  • 它是500(而不是403)这一事实可能意味着UpdateItem操作被完全阻止了addin app

  • jwt令牌(来自getCallbackTokenAsync)没有't have ' scp'键

  • 如果使用另一个令牌发送相同的UpdateItem XML Soap数据包,则从Azure中注册的具有读取/写入权限的测试OAuth应用程序发送 - >成功 . 这个app jwt标记用"scp":"full_access_as_user Mail.Read Mail.ReadWrite Mail.Send"

  • 尝试使用加载项令牌的另一个交换用户 - 也失败了 .

  • Office AddIn文档声明在addin的上下文中支持EWS UpdateItem操作 . 见Office Dev Center

  • 摘要:只有使用Addin OAuth令牌的Ews UpdateItem失败 . 其他操作成功,使用其他令牌(或Basic Auth)发布UpdateItem也会成功 .

1 回答

  • 2

    您应该能够将UpdateItem与 makeEwsRequestAsync 一起使用 . 您不能使用 getCallbackTokenAsync ,因为此调用返回只读的令牌,该令牌只能用于 GetItemGetAttachment . 使用 makeEwsRequestAsync 发出请求时,您的XML SOAP请求( makeEwsRequest 中的数据参数应如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                   xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
                   xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <soap:Body>
        <UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
          <ItemChanges>
            <t:ItemChange>
              <t:ItemId Id = "AAMkAGI3NDEzZjRhLWU3ZjktNGViNy04MTI1LWFhOWRiZDRlY2QwNABGAAAAAADBaXFYA4KPQqsQBpmZF2+2BwAa6KJzOcvaRKcc5UfLbF5tAAAA4fK1AAACk4HLLuxASqDPNieBkIv8AANIKlICAAA=" ChangeKey="CQAAABYAAAACk4HLLuxASqDPNieBkIv8AANIb3mG"/>
              <t:Updates>
                <t:SetItemField>
                  <t:FieldURI FieldURI = "item:Categories" />
                  <t:Message>
                    <t:Categories>
                      <t:String>Workout</t:String>
                    </t:Categories>
                  </t:Message>
                </t:SetItemField>
              </t:Updates>
            </t:ItemChange>
          </ItemChanges>
        </UpdateItem>
      </soap:Body>
    </soap:Envelope>
    

    您不需要在调用makeEwsRequestAsync时传入回调令牌 .

相关问题