Office365 Can';t仅使用Microsoft Graph应用程序身份验证访问用户日历

Office365 Can';t仅使用Microsoft Graph应用程序身份验证访问用户日历,office365,microsoft-graph-api,Office365,Microsoft Graph Api,我在下载了NodeJS代码,并根据需要授予了所有权限(在所有邮箱中读取和写入日历以及在Microsoft Graph应用程序权限中读取目录数据应用程序权限) 我可以成功获取添加到Azure AD的所有用户,但我无法获取他们的任何日历信息或创建事件(这是示例中的原始代码)。我进行的所有调用都返回以下错误: '{\r\n "error": {\r\n "code": "UnknownError",\r\n "message": "",\r\n "innerError": {\r\n "reques

我在下载了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帐户的管理员。我不知道这是否是正常行为,我应该手动将我的office 365用户及其Microsoft帐户(我也创建了该帐户)添加到Azure AD,或者这可能是导致此错误的原因

我的目标是检查用户在特定时间段内是否空闲(日历中没有会议),根据使用calendarView调用,这似乎是可能的

谢谢你的帮助。谢谢

请务必注意,我的office 365域与Azure AD帐户中的域不同,尽管我的office 365管理员是Azure AD帐户的管理员。我不知道这是否是正常行为,我应该手动将我的office 365用户及其Microsoft帐户(我也创建了该帐户)添加到Azure AD,或者这可能是导致此错误的原因

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

要获取详细的错误消息,我们可以使用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);
});
然后,您可以使用此令牌测试,以找到此问题的根本原因

请务必注意,我的office 365域与Azure AD帐户中的域不同,尽管我的office 365管理员是Azure AD帐户的管理员。我不知道这是否是正常行为,我应该手动将我的office 365用户及其Microsoft帐户(我也创建了该帐户)添加到Azure AD,或者这可能是导致此错误的原因

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

要获取详细的错误消息,我们可以使用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);
});

然后,您可以使用此令牌测试,以找到此问题的根本原因。

非常感谢您的帮助。似乎出于身份验证目的,我仍然需要令牌端点,而office365注册不提供该端点。你知道我在哪里可以获得正确的url吗?是获取令牌的端点。更多详情请参阅。非常感谢您的帮助。似乎出于身份验证目的,我仍然需要令牌端点,而office365注册不提供该端点。你知道我在哪里可以获得正确的url吗?是获取令牌的端点。有关更多详细信息,请参阅。