【发布时间】:2020-07-04 17:42:43
【问题描述】:
我正在尝试使用节点 js 从用户的 Microsoft OneDrive 中获取文件列表(我感兴趣的 xlsx 和 CSV 文件)。从列表中选择文件,然后将其下载到本地系统中。
我可以查看有关使用 OneDrive REST API here 的 Microsoft 文档。但是,由于我是新手,所以我真的无法解决这个问题。任何帮助将不胜感激。
我想做一些类似于我们可以使用 Google Drive 做的事情,我可以在其中获取文件列表及其名称和唯一 ID,当用户选择一个文件时,通过使用唯一 ID,我能够下载所需的文件。我想知道 OneDrive 是否可以做类似的事情。
我目前的进展:
- 我可以要求用户提供他们的同意并获取代码以返回重定向 Uri(在我的情况下为 localhost)。
- 拿到代码后,我用它换了刷新令牌。
为了进行这种交换,我使用 Postman 进行 POST 请求。该网址是https://login.microsoftonline.com/common/oauth2/v2.0/token?grant_type=authorization_code&client_id=your_app_client_id&code=use_the_code_returned_on_previous_step
- 现在我有了一个刷新令牌,我想做一些操作,比如列出我的 OneDrive 上的文件并选择要下载的任何人。
【问题讨论】:
-
我至少尝试搜索相关资源以开始使用 OneDrive API 工作。我发现(这个例子)[gist.github.com/tanaikech/22bfb05e61f0afb8beed29dd668bdce9] by Tanaikech,它是关于上传文件的。我能够生成 refresh_tokens 并进行身份验证。但是,仍然无法上传,因为它显示“拒绝访问”。我已经交叉检查了 Files.ReadWrite.all 范围也包括在内。真的无法进一步破解。
-
您是否在 AAD 中的应用注册以及获取不记名令牌的调用中都包含范围(或使用 graph.microsoft.com/.default)?我认为人们需要更多地了解您在通话中发送的内容(在问题中嵌入代码,不要发送链接)。评论中的链接也不起作用,仅供参考。
-
@socasanta,是的,我在 AAD 中的应用注册期间和我的 API 调用期间都包含了范围。另外,感谢您指出该链接不起作用。这是正确的链接:gist.github.com/tanaikech/… 而且,我选择不在问题本身中提及该代码,以免偏离实际问题,因为我的最终目标是下载文件,而这个示例是关于上传文件的。我想将此作为我正在寻找的解决方案的示例。
-
您应该有 2 个令牌进入 /token 响应 - access_token 和 refresh_token。您应该使用 access_token(而不是 refresh_token)进行操作。 (你说的是 refresh_token,所以我澄清一下)。
-
是的。对于每个操作,我都需要访问令牌,但由于它们是短暂的,因此为了更大的利益,我提到了刷新令牌,因为它们可用于为每个操作获取新的访问令牌。谢谢你说得更清楚。 :) 对列出 OneDrive 中的文件或/和下载文件有任何帮助吗?
标签: node.js rest google-drive-api microsoft-graph-api onedrive