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

Microsoft graph api 在节点中更新Microsoft Graph中的事件,microsoft-graph-api,Microsoft Graph Api,我有一个可以访问用户日历的移动应用程序(Microsoft)。获得访问令牌后,我将其保存在后端数据库中以供重用。然后,我使用保存的令牌分别从node.js API调用Microsoft Graph API,该令牌工作正常: var microsoftGraph = require("@microsoft/microsoft-graph-client"); var client = microsoftGraph.Client.init({ authProvider: (done) =>

我有一个可以访问用户日历的移动应用程序(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集成在一起,而无需从客户端续订令牌?

Access令牌在60分钟后过期,因此您需要获取新令牌或使用刷新令牌。刷新令牌可用于获取新的访问令牌,该API调用的文档如下:

要获取刷新令牌,请请求
脱机访问
权限,用户将在同意屏幕中看到“随时访问您的数据”。以下是请求
脱机访问范围的示例:


谢谢你,丹。我的问题是我无法请求脱机访问,因为我正在从移动应用启动访问请求。这意味着我必须为令牌请求创建一个网页,或者将应用程序机密放在移动应用程序上?我在Xamarin应用程序中遇到的具体错误是“API不接受“openid电子邮件配置文件脱机访问”值作为用户提供的范围”我不是身份验证专家,但我认为OAuth2.0授权代码流更适合您的情况,因为您使用的是移动应用程序和后端应用程序。基本上,用户登录您的手机应用程序,而不是立即获取访问令牌,您将获得一个发送到后端的代码,它将该代码交换为令牌(访问令牌和刷新令牌)。因此,应用程序机密仅存储在服务器上,并在请求令牌时使用。更多信息可在此处找到: