Microsoft Graph API下载文件内容返回Unauthorized 401

时间:2018-04-13 09:15:09

标签: microsoft-graph onedrive sharepoint-online

我正在尝试使用“仅限应用”令牌从SharePoint Online下载文件。我可以使用此URL获取文件信息

https://graph.microsoft.com:443/v1.0/sites/{siteId}/drives/{driveId}/list/items/{itemId}/driveItem

但是当我尝试使用此网址下载文件时

https://graph.microsoft.com:443/v1.0/sites/{siteId}/drives/{driveId}/list/items/{itemId}/driveItem/content

我收到以下错误

403 FORBIDDEN

Content-Length →13
Content-Type →text/plain; charset=utf-8
Date →Fri, 13 Apr 2018 08:47:12 GMT
MicrosoftSharePointTeamServices →16.0.0.7604
P3P →CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"
SPIisLatency →2
SPRequestDuration →53
X-Content-Type-Options →nosniff
X-MS-InvokeApp →1; RequireReadOnly
X-MSDAVEXT_Error →917656; Access+denied.+Before+opening+files+in+this+location%2c+you+must+first+browse+to+the+web+site+and+select+the+option+to+login+automatically.
X-MSEdge-Ref →Ref A: B9E0C567B0CC4E60AEE93EEB8DC06AF1 Ref B: VIEEDGE0813 Ref C: 2018-04-13T08:47:12Z
X-Powered-By →ASP.NET
X-SharePointHealthScore →0

出了什么问题?

似乎在内部它生成了一个下载链接(... / _ layouts / 15 / download.aspx?UniqueId = ...),它与username / pwd令牌一起使用,但不适用于“仅限app”令牌< / p>

我有另一个办公室365订阅,使用“仅限app”令牌。另一个订阅有一个自定义域,但我看不到其他配置差异(两者都将LegacyAuthProtocolsEnabled属性设置为true,相同的共享选项...)

编辑:似乎我星期五正在测试的例子现在有效!!

3 个答案:

答案 0 :(得分:1)

这个错误在上周三出现,并且正在向越来越多的租户传播。看来,Graph API / Sharepoint API生成的临时令牌无效。这会影响:

  • 当您使用临时令牌接收上传到的网址
  • 时,上传文件块
  • @ microsoft.graph.downloadUrl,因为它包含一个临时标记
  • 内容下载,因为它使用与@ microsoft.graph.downloadUrl
  • 相同的精确网址

请尽快解决这个问题,因为我的应用程序已经崩溃且客户很生气

我也在这里创建了一个帖子,但没有回复:Temporary tokens issued by graph api is invalid since wednesday

此错误也出现在周三:Unable to set fileSystemInfo.lastModifiedDateTime on files on Sharepoint Online for some users since wednesday

您在此Mark LeFleur上找到了什么吗?

答案 1 :(得分:0)

您应该使用从@microsoft.graph.downloadUrl响应中获取的/v1.0/me/drive/list/items/x/driveItem属性来获取该文件的仅限应用的网址。 GET请求允许您下载文件。

请参阅https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/driveitem#instance-attributes

答案 2 :(得分:0)

我已经执行了最初失败并且现在有效的相同示例,至少在我拥有的两个租户中。

我没有更改任何配置或源代码,因此它似乎是一个已修复的临时问题。