使用 client_credentials 访问个人 OneDrive API

Access Personal OneDrive API with client_credentials

对于一个项目,我需要显示存储在个人 OneDrive 上的一些文件。

我不能使用经典的 OAuth2 身份验证,我需要作为应用程序而不是用户进行身份验证,如本页所述:https://docs.microsoft.com/en-us/graph/auth-v2-service

但 adminConsent 似乎仅适用于企业订阅。 有没有办法用个人 OneDrive 做到这一点?

我尝试在我的个人 OneDrive 中声明一个共享点应用程序,但它似乎是企业功能。

您是否尝试生成 link 来嵌入您的文件夹?当您 select OneDrive 文件夹时,您可以使用导航菜单上的图标来执行此操作。

我看不到任何通过声明应用程序来共享文件的解决方案,我猜这在个人 OneDrive 中受到限制。我确实在企业 One Drive 中尝试过它,似乎我可以使用 maginc link

声明一个应用程序
/_layouts/15/appregnew.aspx

希望您能找到解决方案

我终于找到了 代码流身份验证 offline_access 范围 的解决方案。 使用这种方法,管理员必须连接一次才能获得刷新令牌,之后可以随时使用该令牌来获得 access_token。

https://docs.microsoft.com/en-us/onedrive/developer/rest-api/getting-started/msa-oauth?view=odsp-graph-online#code-flow

我找到了一个不同的解决方案,它似乎与您的解决方案不同,但可能会有所帮助。如果您遵循有关创建守护程序应用程序的文档,则可以创建一个访问令牌,前提是您具有以下内容:

  • 您的客户 ID
  • 您的客户机密
  • 您的租户姓名

请参阅 this link for info on daemon applications. There are examples also on this page 了解如何实际提出请求。在该页面中,这是 HTTP 请求正文。

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity.
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

您将收到如下回复。然后,您可以使用 access_token 发出 API 请求。

{
    "token_type": "Bearer",
    "expires_in": 3599,
    "ext_expires_in": 3599,
    "access_token": "ACCESS_TOKEN"
}

您可以找到 Python 代码 example here