拒绝访问 Office 365 API 中的会议室日历


Access denied for Room Calendar in Office 365 API

我正在使用Office 365 REST API在PHP中编写一个应用程序,该应用程序下拉会议室的所有事件列表。我已经授权了该应用程序,可以通过浏览器导航到 URL 来拉回房间事件列表,但是,一旦我尝试通过 CURL 发出请求,我就会收到以下响应。

{"error":{"code":"ErrorAccessDenied","message":"Access is denied. Check credentials and try again."}}

我的PHP如下

public function getCalendarEvents($token, $calendar) {
    $url = "https://outlook.office365.com/api/v1.0/users/$calendar/events";
    //$url = "https://outlook.office365.com/api/v1.0/me/events";
    $headers = array('Authorization: Bearer ' . $token, 'Content-Type: application/json', 'Accept:application/json');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    $output=curl_exec($ch);
    $info = curl_getinfo($ch);
    //print_r($info['request_header']);
    curl_close($ch);
    print_r($output);
}

我尝试传入房间的电子邮件地址,因为两者都

$url = "https://outlook.office365.com/api/v1.0/users/email@example.com/events";

$url = "https://outlook.office365.com/api/v1.0/Users('email@example.com')/Events";

两者都不起作用。我能够使用

$url = "https://outlook.office365.com/api/v1.0/me/events";

我是 Office 365 门户的管理员,并且被设置为对聊天室具有完全权限。在我的研究中,我遇到了这个 SO 答案,但在 Azure 中取消选中此选项没有任何区别。

这里似乎报告了非常类似的问题

目前,我们不支持经过身份验证的用户使用 OAuth 访问其他用户的邮件、日历或联系人。 这就是为什么当您检索会议室的日历但使用您自己的日历时,您的请求失败的原因。 此请求适用于浏览器,因为你使用的是基本身份验证,我们不建议对你的应用执行此操作。 如果您确实想使用 OAuth 试用请求,可以使用我们的 OAuth 沙盒。

好消息是,我们即将发布对 OAuth 客户端凭据流的支持,该流将使应用能够在租户管理员同意的情况下访问租户中的任何邮箱。 由于你是租户管理员,因此一旦我们发布此功能,你将能够授权应用访问租户会议室的日历。 因此,请继续关注未来几周的公告。

[更新]:现在支持服务帐户。有关更多详细信息,请参阅我们的博客公告,如果您有任何问题,请告诉我们。

您必须发送密码。如果您的程序多次尝试可能会被阻止为垃圾邮件发送者。

看看吧:http://support2.microsoft.com/kb/2630976

若要解决此问题,请重置用户的密码。为此,请按照下列步骤操作:打开 Web 浏览器,浏览到 Office 365 门户 (https://portal.office.com),然后使用用户的过期凭据登录。出现提示时,为用户输入新的 Office 365 密码。确保密码符合 Office 365 的条件。