Javascript 下载带有tempauth的Url在Microsoft graph中抛出403错误
我一直在努力创建一个filehandler来在sharepoint中打开文件。我已经实现了Oauth来授权应用程序 到目前为止,我可以访问文件对象,如下所示: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
{
"@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
检索实际文件。