我下载了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调用,这似乎是可能的。
我感谢任何帮助。谢谢。
答案 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,以找出此问题的根本原因。