在节点中的Microsoft Graph中更新事件

时间:2017-08-07 15:42:18

标签: microsoft-graph

我有一个可以访问用户日历的移动应用程序(Microsoft)。获得访问令牌后,我将其保存在后端数据库中以供重用。然后我 - 单独 - 从node.js API调用Microsoft Graph API,保存的令牌工作正常:

var microsoftGraph = require("@microsoft/microsoft-graph-client");
var client = microsoftGraph.Client.init({
    authProvider: (done) => {
        done(null, token);
    }
});

client.api('/me/calendar/events/xyz').patch({
    'Body': {
        'ContentType': '0',
        'Content': 'test from api 2'
    }
}, (err, res) => {
    if (err) {
        console.log('err: ', err);
    } else {
        console.log('res: ', res);
    }
});

问题是令牌过期,并且没有刷新令牌,无需用户干预即可从服务器续订。

以下是我在2小时后得到的错误:

err: {
    statusCode: 401,
    code: 'InvalidAuthenticationToken',
    message: 'CompactToken validation failed with reason code: -2147184088.',
    requestId: '5bdd2402-b1b9-4c25-8b2d-1ca2c4a79192',
    date: 2017 - 08 - 07 T19: 27: 44.000 Z,
    body: {
        code: 'InvalidAuthenticationToken',
        message: 'CompactToken validation failed with reason code: -2147184088.',
        innerError: {
            'request-id': '5bdd2402-b1b9-4c25-8b2d-1ca2c4a79192',
            date: '2017-08-07T15:27:44'
        }
    }
}

我在这里缺少什么?必须有一种方法可以将服务器端代码与Microsoft Graph集成,而无需从客户端更新令牌吗?

1 个答案:

答案 0 :(得分:3)

访问令牌在60分钟后过期,因此您需要获取新令牌或使用刷新令牌。刷新令牌可用于获取新的访问令牌,该API调用的文档位于此处:https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_user#5-use-the-refresh-token-to-get-a-new-access-token

要获取刷新令牌,请求offline_access权限,用户将在同意屏幕中将此视为“随时访问您的数据”。可以在此处找到请求offline_access范围的示例:https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_user#2-get-authorization

enter image description here