请参阅底部的编辑。
我正在尝试使用 EWS(不是托管 API)使用 Office 365 API 在用户日历上创建/删除/更新事件。
到目前为止,我已成功使用基本身份验证来验证我的 SOAP 请求是否有效。我现在尝试用 OAuth 2 替换 Basic Auth。我需要使用客户端凭据流程。
以下是我遵循的步骤:
-
已向应用程序提供管理员同意。我在浏览器中启动了以下 URL,并使用管理员帐户提供了同意。
https://login.microsoftonline.com/common/oauth2/authorize?
response_type=code+id_token&
scope=openid&
client_id=[Client ID]&
redirect_uri=http://localhost/myapp/permissions&
resource=https://outlook.office.com&
prompt=admin_consent&
response_mode=form_post&
nonce=1234
获得同意后,我检索了id_token
从响应中,并使用解码它JWT.io http://jwt.io。从有效负载中,我记录了tid
.
-
接下来,我通过发送以下请求检索访问令牌:
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]
我收到以下错误(403 Forbidden
):
The token contains not enough scope to make this call.
我需要做什么来修复此错误?
Edit 1:我添加了Use Exchange Web Services with full access to all mailboxes
应用程序权限,并且发送 SOAP 消息现在会导致500 Internal Server Error
...
该解决方案涉及以下内容:
添加Use Exchange Web Services with full access to all mailboxes
应用程序权限,因为 EWS 不允许使用更细粒度的权限。
添加一个Exchange 模拟 SOAP 标头 https://msdn.microsoft.com/en-us/library/office/bb204088(v=exchg.140).aspx为目标邮箱。
设置X-锚邮箱 https://blogs.msdn.microsoft.com/webdav_101/2015/05/11/best-practices-ews-authentication-and-access-issues/HTTP 标头。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)