【问题标题】:Can't access users calendars using Microsoft Graph app only authentication无法使用仅 Microsoft Graph 应用程序身份验证访问用户日历
【发布时间】:2016-07-14 19:17:53
【问题描述】:

我在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 调用,这似乎是可能的。

感谢您的帮助。谢谢。

【问题讨论】:

    标签: office365 microsoft-graph-api


    【解决方案1】:

    可能需要注意的是,我的 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 以找到此问题的根本原因。

    【讨论】:

    • 非常感谢您的帮助。看来,出于身份验证的目的,我仍然需要 office365 注册不提供的令牌端点。你知道我在哪里可以获得正确的网址吗?
    • login.microsoftonline.com/common/oauth2/token 是获取token的端点。更多详情可以参考here
    猜你喜欢
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多