使用EWS和OAuth的Office 365 Calendar API 2

时间:2017-01-26 14:32:52

标签: oauth-2.0 office365 exchangewebservices

请参阅底部的修改。

我正在尝试使用EWS(而不是托管API)来使用Office 365 API来创建/删除/更新用户日历上的事件。

到目前为止,我已成功使用Basic Auth来验证我的SOAP请求是否有效。我现在正尝试用OAuth 2替换Basic Auth。我需要使用客户端凭据流。

以下是我遵循的步骤:

  • 提供管理员同意的应用程序。我在浏览器中启动了以下网址,并使用管理员帐户提供了同意。

    id_token
  • 在同意后,我从响应中检索了tid,并使用JWT.io对其进行了解码。从有效负载中,我记录了POST https://login.microsoftonline.com/[TID]/oauth2/token HTTP/1.1 cache-control: no-cache Content-Type: application/x-www-form-urlencoded Accept: */* Host: login.microsoftonline.com accept-encoding: gzip, deflate Connection: close client_id=[CLIENT ID]& client_secret=[CLIENT SECRET]& grant_type=client_credentials& resource=https%3A%2F%2Foutlook.office.com

  • 接下来,我通过发送以下请求来检索访问令牌:

    Authorization: Bearer [Access Token]
  • 使用访问令牌,我发送了与使用Basic Auth相同的请求,但我用403 Forbidden替换了基本身份验证标头

我收到以下错误(The token contains not enough scope to make this call.): Use Exchange Web Services with full access to all mailboxes

我需要做些什么才能解决此错误?

编辑1:我添加了500 Internal Server Error应用程序权限,现在发送SOAP消息会产生hidden-xs ...

1 个答案:

答案 0 :(得分:0)

解决方案涉及以下内容:

  1. 添加Use Exchange Web Services with full access to all mailboxes应用程序权限,因为EWS不允许使用更精细的权限。

  2. 为目标邮箱添加ExchangeImpersonation SOAP header

  3. 设置X-AnchorMailbox HTTP标头。