微软图表。使用应用程序自己的身份访问 OneDrive

Microsoft Graph. Access OneDrive with application own identity

在移动应用程序中,我们正在生成一些要上传到客户端云的图像。 客户使用的是 OneDrive For Business,所有 360 套件(我还没有更多关于它的信息)。

我们想要做的是能够将图像存储在 OneDrive 帐户中,而无需用户登录。我找到的所有用于验证 OneDrive 的文档都包括一个交互式登录过程,它我们不想: https://docs.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/graph-oauth?view=odsp-graph-online

我发现对于 Microsoft Graph,可以使用应用程序自己的身份登录(仅限 REST),但我不是 100% 清楚这种身份验证可以授予对 OneDrive 的访问权限。 https://docs.microsoft.com/en-us/graph/auth-v2-service

由于我对 Microsoft 云基础架构一点都不熟悉,因此希望能提供一些信息。

是否真的可以通过应用程序自己的身份验证来访问 OneDrive 文件夹?

是的,应该可以使用 Microsoft Graph API 和一个使用应用程序身份的驱动器文件(即无需用户登录)

REST API 应该有帮助

请注意,有许多可用于 Microsoft Graph API 的 SDK's/Client 库,您可以根据自己的平台使用这些库。例如Microsoft Graph .NET Client Library。正如您提到的仅 REST,我在这里为直接 REST API 提供 link。

  1. 正在上传文件(最多 4 MB)- Upload REST API

    所需的最低权限为 Files.ReadWrite.All(在应用程序权限下,此应用程序权限首先需要管理员同意。如果您不熟悉同意流程,请查看此处:Azure AD Consent Framework 并在评论中提及,如果需要我可以添加更多细节)

  2. 上传更大的文件 - Resumable Upload REST API

身份验证

从流程的角度来看,您需要使用 OAuth 2.0 Client Credentials Grant Flow to authenticate

注意:请注意,此流程仅适用于机密客户。因此,您不应直接从移动客户端甚至桌面客户端(如 WPF 或控制台应用程序)使用它,因为这些 public 客户端无法安全地处理客户端机密。您的移动客户端应调用后端 API,后者又可以调用 Microsoft Graph 并使用客户端机密,就像使用应用程序权限的守护进程一样。

在此 link 结尾处有适用于 .NET Core 2.1 和 ASP.NET MVC 的代码示例。