无法使用Microsoft Graph app only身份验证访问用户日历

时间:2016-07-14 19:17:54

标签: office365 microsoft-graph

我下载了https://github.com/microsoftgraph/nodejs-apponlytoken-rest-sample处提供的NodeJS代码,并根据需要授予了所有权限(在所有邮箱中读取和写入日历,在Microsoft Graph应用程序权限中读取目录数据应用程序权限)。

我可以成功获取添加到Azure AD的所有用户,但我无法获取任何日历信息或创建事件(这是示例中的原始代码)。我发出的所有调用都返回以下错误:

'{\r\n "error": {\r\n "code": "UnknownError",\r\n "message": "",\r\n "innerError": {\r\n "request-id": "1fd8568b-b4a3-4168-a835-c389eb783890",\r\n "date": "2016-07-14T18:08:41"\r\n }\r\n }\r\n}' }

可能需要注意的是,我的office 365域与Azure AD帐户中的域不同,尽管我的office 365管理员是Azure AD帐户的管理员。我不知道这是否是正常行为,我应该使用他们的Microsoft帐户(我也创建)手动将我的Office 365用户添加到Azure AD,否则可能是导致此错误的原因。

我的目标是在特定时间段内检查用户是否有空(在他们的日历中没有会议),根据Microsoft Graph API: can't list recurring events of a meeting room使用calendarView调用,这似乎是可能的。

我感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

  
    

可能需要注意的是,我的office 365域与Azure AD帐户中的域不同,尽管我的office 365管理员是Azure AD帐户的管理员。我不知道这是否是正常行为,我应该使用他们的Microsoft帐户(我也创建)手动将我的Office 365用户添加到Azure AD,否则可能是导致此错误的原因。

  

当我们使用客户端凭据流对应用进行身份验证时,它会使用客户端ID 客户端密钥。我们将Office 365帐户与Azure AD帐户相关联是正常的,它不会影响我们对应用程序进行身份验证。 但您需要确保在Office 365目录而不是Azure AD目录上注册了应用程序,以便目录中的用户拥有在线使用Exchange的许可。

要获取详细错误消息,我们可以使用 Fiddler 来跟踪Http请求。为了使Fiddler能够从Node.js捕获Http请求,我们需要使用代理。您可以将代码添加到Graph.js:

var requestO = require('request');
var Q = require('q');

var request = requestO.defaults({ "proxy": "http://127.0.0.1:8888"});

您还可以使用以下代码在app.js中获取访问令牌

// Get an access token for the app.
auth.getAccessToken().then(function (token) {
    var users = [{"id":"userId","displayName":"displayName"}];
    console.log(token);
    graph.createEvent(token, users)
    console.log("create event finished...")

}, function (error) {
    console.error('>>> Error getting access token: ' + error);
});

然后,您可以使用此令牌来测试Microsoft Graph REST API,以找出此问题的根本原因。