Azure active directory 如何使用Graph REST API对personal OneDrive进行身份验证

Azure active directory 如何使用Graph REST API对personal OneDrive进行身份验证,azure-active-directory,microsoft-graph-api,onedrive,Azure Active Directory,Microsoft Graph Api,Onedrive,我正在尝试编写一个R包,允许用户从R访问OneDrive文件夹中的文件。API是Microsoft Graph OneDrive for Business(据我所知,它基本上是隐藏在引擎盖下的SharePoint)一切正常。但是,我无法让它与personal OneDrive配合使用 自定义应用程序注册,消费者授权端点 当我在自己的AAD租户下使用应用程序注册时,我从消费者AAD授权端点收到以下错误: AADSTS50020:用户帐户'xxxxx@gmail.com租户“消费者”中不存在“来自身

我正在尝试编写一个R包,允许用户从R访问OneDrive文件夹中的文件。API是Microsoft Graph

OneDrive for Business(据我所知,它基本上是隐藏在引擎盖下的SharePoint)一切正常。但是,我无法让它与personal OneDrive配合使用

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

AADSTS50020:用户帐户'xxxxx@gmail.com租户“消费者”中不存在“来自身份提供程序”live.com,无法访问该租户中的应用程序“d44a05d5-c6a5-4bbb-82d2-44312372380”(AzureRtest_cli)。首先需要将该帐户作为外部用户添加到租户中。注销并使用其他Azure Active Directory用户帐户再次登录

自定义应用程序注册,
9188040d-6c67-4c5b-b112-36a304b66dad
endpoint 从中可以看出,令牌应该是针对租户的
9188040d-6c67-4c5b-b112-36a304b66dad
,而不是针对一般
消费者的
。当我尝试这样做时,我得到了一个似乎有效的令牌。但是,与
https://api.onedrive.com/v1.0/drive
端点导致一个神秘的401错误

Azure CLI应用程序注册,
消费者
端点 作为一名黑客,我尝试了利用Azure CLI的应用程序注册。这与

AADSTS65002:必须通过预授权配置第一方应用程序“04b07795-8ddb-461a-bbee-02f9e1bf7b46”和第一方资源“0000000 3-0000-0000-c000-000000”之间的同意。详情请访问

Azure CLI应用程序注册,
9188040d-6c67-4c5b-b112-36a304b66dad
endpoint 最后,我尝试使用CLI应用程序注册此租户,但也失败了:

未经授权的_客户端:客户端不存在或未为使用者启用。如果您是应用程序开发人员,请通过位于的Azure门户中的应用程序注册配置新应用程序


要进入我的个人OneDrive,我需要执行哪些具体步骤?

结果是我的代码中有一个错误:我使用的是租户
消费者。在Microsoft.com
上,而不是
消费者。与适用于我的个人OneDrive的Graph进行通信的过程是:

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

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

事实证明,我的代码中有一个错误:我使用的是租户
consumers.onmicrosoft.com
而不是
consumers
。与适用于我的个人OneDrive的Graph进行通信的过程是:

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

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

看起来它没有将您的帐户视为个人帐户。请通过调用
消费者
授权端点来分享您获取访问令牌的请求。@AllenWu啊,我发现我的代码中有一个bug;我用的是“consumers.onmicrosoft.com”而不是“consumers”。它起作用了now@AllenWu只是为了确认一下,我应该与
graph.microsoft.com
联系以访问我的个人Onedrive,而不是
api.Onedrive.com
?是的。您应该调用talk到
graph.microsoft.com
,因为访问令牌是针对microsoft graph的,而不是
api.onedrive.com
。你已经解决了这个问题,对吗?你能发布一个答案来帮助别人吗?看起来它并没有把你的帐户当作个人帐户。请通过调用
消费者
授权端点来分享您获取访问令牌的请求。@AllenWu啊,我发现我的代码中有一个bug;我用的是“consumers.onmicrosoft.com”而不是“consumers”。它起作用了now@AllenWu只是为了确认一下,我应该与
graph.microsoft.com
联系以访问我的个人Onedrive,而不是
api.Onedrive.com
?是的。您应该调用talk到
graph.microsoft.com
,因为访问令牌是针对microsoft graph的,而不是
api.onedrive.com
。你已经解决了这个问题,对吗?你能发布一个答案来帮助其他人吗?文档需要一些澄清,所以感谢你提醒我们注意。在大多数情况下,您应该使用Microsoft Graph来访问个人OneDrive请求。如果您最终需要与direct API对话(对于一个新的应用程序,如果您还没有这样做,则不应该使用direct API),您可以使用您调用的direct endpoint来进行对话,并且您可以使用Microsoft Graph来发现URL。最终,Microsoft Graph API是正确的,我们将更新文档以使其更加清晰。文档需要一些澄清,因此感谢您提醒我们注意。在大多数情况下,您应该使用Microsoft Graph来访问个人OneDrive请求。如果你最终需要与direct API对话(对于一个新的应用程序,如果你不是alrea,你不应该与direct API对话)