如何使用 Graph REST 对个人 OneDrive 进行身份验证 API

How to authenticate to personal OneDrive with Graph REST API

我正在尝试编写一个 R 程序包,让用户可以从 R 访问他们的 OneDrive 文件夹中的文件。API 是 Microsoft Graph。

OneDrive for Business(据我了解,它基本上是 SharePoint 的底层)一切正常。但是,我无法让它与个人 OneDrive 一起使用。

自定义应用程序注册,consumers 授权端点

当我在自己的 AAD 租户下使用应用程序注册时,我从 consumers AAD 授权端点收到以下错误:

AADSTS50020: User account 'xxxxx@gmail.com' from identity provider 'live.com' does not exist in tenant 'Consumers' and cannot access the application 'd44a05d5-c6a5-4bbb-82d2-443123722380'(AzureRtest_cli) in that tenant. The account needs to be added as an external user in the tenant first. Sign out and sign in again with a different Azure Active Directory user account.

自定义应用程序注册,9188040d-6c67-4c5b-b112-36a304b66dad 端点

this page 看来,令牌应该用于租户 9188040d-6c67-4c5b-b112-36a304b66dad 而不是通用 consumers。当我尝试这样做时,我获得了一个看似有效的令牌。但是,与 https://api.onedrive.com/v1.0/drive 端点通信会导致神秘的 401 错误。

Azure CLI 应用注册,consumers 端点

作为黑客,我尝试搭载 Azure CLI 的应用程序注册。这失败了

AADSTS65002: Consent between first party application '04b07795-8ddb-461a-bbee-02f9e1bf7b46' and first party resource '00000003-0000-0000-c000-000000000000' must be configured via preauthorization. Visit https://identitydocs.azurewebsites.net/static/aad/preauthorization.html for details

Azure CLI 应用注册,9188040d-6c67-4c5b-b112-36a304b66dad 终结点

最后,我尝试使用此租户的 CLI 应用程序注册,但也失败了:

unauthorized_client: The client does not exist or is not enabled for consumers. If you are the application developer, configure a new application through the App Registrations in the Azure Portal at https://go.microsoft.com/fwlink/?linkid=2083908.

我需要执行哪些具体步骤才能访问我的个人 OneDrive?

原来我的代码中有一个错误:我使用的是租户 consumers.onmicrosoft.com 而不是 consumers。为我工作的个人 OneDrive 与 Graph 通信的过程是:

  • 使用 here 所述的授权代码流程,具有以下规范:
    • 租户:consumers
    • 客户端 ID:用于我的自定义应用程序注册
    • 范围:https://graph.microsoft.com/{scope} offline_access openid 其中范围是列出的范围之一 here
  • 使用 API 端点 https://graph.microsoft.com/v1.0

关于最后一点,请注意文档 here 不正确或至少已过时,因为它仍然提供 https://api.onedrive.com/v1.0 作为个人 OneDrive 请求的端点。