Javascript 下载带有tempauth的Url在Microsoft graph中抛出403错误

Javascript 下载带有tempauth的Url在Microsoft graph中抛出403错误,javascript,microsoft-graph-api,sharepoint-online,Javascript,Microsoft Graph Api,Sharepoint Online,我一直在努力创建一个filehandler来在sharepoint中打开文件。我已经实现了Oauth来授权应用程序 到目前为止,我可以访问文件对象,如下所示: { "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#shares('u%21aHR0cHM6Ly9yYXBpZHBsYXRmb3JtLnNoYXJlcG9pbnQuY29tL1NoYXJlZCUyMERvY3VtZW50cy9maWxlLnRlc3Q_dGVtc

我一直在努力创建一个filehandler来在sharepoint中打开文件。我已经实现了Oauth来授权应用程序

到目前为止,我可以访问文件对象,如下所示:

{
  "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#shares('u%21aHR0cHM6Ly9yYXBpZHBsYXRmb3JtLnNoYXJlcG9pbnQuY29tL1NoYXJlZCUyMERvY3VtZW50cy9maWxlLnRlc3Q_dGVtcGF1dGg9ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKdWIyNWxJbjAuZXlKaGRXUWlPaUl3TURBd01EQXdNeTB3TURBd0xUQm1aakV0WTJVd01DMHdNREF3TURBd01EQXdNREF2Y21Gd2FXUndiR0YwWm05eWJTNXphR0Z5WlhCdmFXNTBMbU52YlVBeE9XVXhNakE0WkMweU1qVm1MVFEzWVdNdE9XTXpaQzAzWXpaa00yVTVPVGxpWVdJaUxDSnBjM01pT2lJd01EQXdNREF3TXkwd01EQXdMVEJtWmpFdFkyVXdNQzB3TURBd01EQXdNREF3TURBaUxDSnVZbVlpT2lJeE5USTJNemt3TURnMElpd2laWGh3SWpvaU1UVXlOalEzTmpRNE5DSXNJbVZ1WkhCdmFXNTBkWEpzSWpvaU5IRTFlV0pCT1ZONlkyaHFaVmd3WWxKSWRFb3hjelF5YkdGYVUxRjRNRU12VVRsVlNGaG9ZVFJUVFQwaUxDSmxibVJ3YjJsdWRIVnliRXhsYm1kMGFDSTZJall6SWl3aWFYTnNiMjl3WW1GamF5STZJbFJ5ZFdVaUxDSmphV1FpT2lKYVJFa3lUVlJaTTA5WFZYUmFWRUpvV21rd01VMUVRWGRNVjFFMFRrUlJkRnB0V21wTmFsazBUVVJKZDFwVVJtMGlMQ0oyWlhJaU9pSm9ZWE5vWldSd2NtOXZablJ2YTJWdUlpd2ljMmwwWldsa0lqb2lUMWRWTTAxVVZUTk5SRUYwVFVSck1FNXBNREJaYW1NeVRGZEplVnBxUlhSUFJFazFXbFJDYlU1NlRYaFpWRmsxSWl3aWMybG5ibWx1WDNOMFlYUmxJam9pVzF3aWEyMXphVndpWFNJc0ltNWhiV1ZwWkNJNklqQWpMbVo4YldWdFltVnljMmhwY0h4aGJtbHphRUJ5WVhCcFpIQnNZWFJtYjNKdExtOXViV2xqY205emIyWjBMbU52YlNJc0ltNXBhU0k2SW0xcFkzSnZjMjltZEM1emFHRnlaWEJ2YVc1MElpd2lhWE4xYzJWeUlqb2lkSEoxWlNJc0ltTmhZMmhsYTJWNUlqb2lNR2d1Wm54dFpXMWlaWEp6YUdsd2ZERXdNRE5pWm1aa1lXRXlOV0UyT1RoQWJHbDJaUzVqYjIwaUxDSjBkQ0k2SWpBaUxDSjFjMlZRWlhKemFYTjBaVzUwUTI5dmEybGxJam9pTXlKOS5hV0U1WTFGalVYQjNUVkpMYmtWSFMzWkJXVGgxUTJGNE5IRnFTM0U1UTBscGRrNTFZMEZIY0dsd1p6MA')/driveItem/$entity",
  "@microsoft.graph.downloadUrl":"https://{tenant}.sharepoint.com/_layouts/15/download.aspx?UniqueId=2d7dfb93-1fae-402a-8219-0126a74d4a37&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvcmFwaWRwbGF0Zm9ybS5zaGFyZXBvaW50LmNvbUAxOWUxMjA4ZC0yMjVmLTQ3YWMtOWMzZC03YzZkM2U5OTliYWIiLCJpc3MiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAiLCJuYmYiOiIxNTI2MzkwMDg3IiwiZXhwIjoiMTUyNjM5MzY4NyIsImVuZHBvaW50dXJsIjoiaEdpb1hmbXZjT3cveFJkMWRYNnlMV3d0dHhXSVlkeXg3UERXbmR5MFE0OD0iLCJlbmRwb2ludHVybExlbmd0aCI6IjEyNCIsImlzbG9vcGJhY2siOiJUcnVlIiwiY2lkIjoiWVdZMVlUSmhOR010WldOak15MDBaV1l4TFdJellXSXRPR1ZsWkRNM1pqZGtZekpqIiwidmVyIjoiaGFzaGVkcHJvb2Z0b2tlbiIsInNpdGVpZCI6Ik9XVTNNVFUzTURBdE1EazBOaTAwWWpjMkxXSXlaakV0T0RJNVpUQm1Oek14WVRZNSIsImFwcF9kaXNwbGF5bmFtZSI6IkJQTU4gVEVTVCIsInNpZ25pbl9zdGF0ZSI6IltcImttc2lcIl0iLCJhcHBpZCI6IjMwN2M5NmZkLTZiZTAtNDJiYi1hODNhLWE2ZDFhMGQyMTE4YiIsInRpZCI6IjE5ZTEyMDhkLTIyNWYtNDdhYy05YzNkLTdjNmQzZTk5OWJhYiIsInVwbiI6ImFuaXNoQHJhcGlkcGxhdGZvcm0ub25taWNyb3NvZnQuY29tIiwicHVpZCI6IjEwMDNCRkZEQUEyNUE2OTgiLCJzY3AiOiJhbGxwcm9maWxlcy5yZWFkIiwidHQiOiIyIiwidXNlUGVyc2lzdGVudENvb2tpZSI6bnVsbH0.aDNPQi9rWmVxSFVmemNCV3d5OUpUTTROcFd2WmxKUGdySmV4ZWxkWDU5ST0&ApiVersion=2.0",
  "createdDateTime":"2018-05-09T15:02:38Z",
  "eTag":"\"{2D7DFB93-1FAE-402A-8219-0126A74D4A37},2\"",
  "id":"01P7SZWCUT7N6S3LQ7FJAIEGIBE2TU2SRX",
  "lastModifiedDateTime":"2018-05-09T15:02:40Z",
  "name":"file.test",
  "webUrl":"https://{tenant}.sharepoint.com/Shared%20Documents/file.test",
  "cTag":"\"c:{2D7DFB93-1FAE-402A-8219-0126A74D4A37},2\"",
  "size":13453,
  "createdBy":{
    "user":{
      "email":"anish@{tenant}.onmicrosoft.com",
      "displayName":"Anish Duwal"
    }
  },
  "lastModifiedBy":{
    "user":{
      "email":"anish@{tenant}.onmicrosoft.com",
      "displayName":"Anish Duwal"
    }
  },
  "parentReference":{
    "driveId":"b!AFdxnkYJdkuy8YKeD3MaaVPyxX7gqyZNrG2Ojd27BJ6-8E-AHhORQ6Fx04pQ_BGq",
    "driveType":"documentLibrary",
    "id":"01P7SZWCV6Y2GOVW7725BZO354PWSELRRZ",
    "path":"/drives/b!AFdxnkYJdkuy8YKeD3MaaVPyxX7gqyZNrG2Ojd27BJ6-8E-AHhORQ6Fx04pQ_BGq/root:"
  },
  "file":{
    "mimeType":"application/octet-stream",
    "hashes":{
      "quickXorHash":"1D02as0SaS8K4jo+JF1b5S6PUjo="
    }
  },
  "fileSystemInfo":{
    "createdDateTime":"2018-05-09T15:02:38Z",
    "lastModifiedDateTime":"2018-05-09T15:02:40Z"
  }
} 
但是,使用
@microsoft.graph.downloadUrl

任何帮助都将不胜感激。谢谢

更新 我正在使用express调用api。下面的请求返回如上所示的文件对象响应

if(requestBody.items) {
    let [driveItem] = JSON.parse(requestBody.items);
    try {
      let content = await request.get(`${driveItem}`, {
        headers: {
          Authorization: `Bearer ${token}`,
        },
      });
      res.render('test', {content: content});
    } catch(e) {
      res.render('test', {content: e.message});
    }
  }
但在请求内容时,它抛出403

let fileobject = JSON.parse(content);
let file = await request.get(`${fileobject["@microsoft.graph.downloadUrl"]}`)
我还尝试直接向url添加内容,但效果不太好

if(requestBody.items) {
  let [driveItem] = JSON.parse(requestBody.items);
  try {
    let content = await request.get(`${driveItem}/content`, {
      headers: {
        Authorization: `Bearer ${token}`,
      },
    });
    res.render('test', {content: content});
  } catch(e) {
    res.render('test', {content: e.message});
  }
}

我使用这些方法来获取访问令牌

async function getAccessToken(code, callback) {
  let jsonAuth = await request.post({
    url: 'https://login.microsoftonline.com/common/oauth2/token',
    formData: {
      'grant_type' : 'authorization_code',
      'code' : code,
      'client_id' : config.clientId,
      'client_secret' : config.clientSecret,
      'redirect_uri' : 'https://simpliapp.herokuapp.com/'
    }
  });
  callback(jsonAuth);
}

function getAuthorizationCode(res) {
  res.writeHead(302, {
    'Location': `https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id=${config.clientId}&resource=${encodeURIComponent('https://graph.microsoft.com/')}&redirect_uri=${encodeURIComponent('https://simpliapp.herokuapp.com/')}`
  });
  res.end();
}

您是如何请求内容的?一些显示如何调用API的代码会很有帮助。您好,@marclafler我已经更新了这个问题。
/content
端点应该是
DriveItem
请求的一部分。这将返回指向预验证URI的
302
。因此,首先调用
/me/drive/items/{item id}/content
,然后按照该调用返回的
302
检索实际文件。