如果其他人遇到类似问题,我在使用个人微软账户时也收到了相同的错误信息,就像原帖作者一样。
所以,如果你正在一个已注册的 Azure Active Directory(AAD)应用程序中使用个人账户,而该类型不是仅限个人微软账户
或任何组织目录中的帐户(任何 Azure AD 目录 - 多租户)和个人微软账户(例如 Skype、Xbox)
,你将收到此错误。此外,你需要使用正确的终结点来避免错误。
主要问题是我们的账户类型。作为个人账户,访问 OneDrive 文件有一些限制。这些限制包括:
- 您只能使用
Oauth2 Code Flow
或 Oauth2 Token Flow
。两者都是交互式方法。[1][2]
- 您在 AAD 中注册的应用程序需要是
仅限个人Microsoft帐户
或 任何组织目录中的帐户(任意Azure AD目录-多租户)和个人Microsoft帐户(如Skype、Xbox)
,每个账户有不同的端点来获取访问令牌(您可以点击应用程序页面上的 端点
按钮查看)。[3]
- 请为您在 AAD 注册的应用程序启用以下委派权限:
Files.Read
、Files.Read.All
、Files.ReadWrite
和 Files.ReadWrite.All
。
在考虑到这些限制的情况下,您可以按照以下两个步骤在Postman中设置工作流程(我使用的是“仅限个人Microsoft帐户”应用类型的端点,并使用“Oauth2 Code Flow”):
重要提示:要使用代码流,您需要在身份验证ADD应用程序侧边栏菜单上启用隐式授权和混合流中的访问令牌。
1. 获取访问令牌:
https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=YOUR_CLIENT_ID&response_type=token&redirect_uri=ONE_OF_REGISTERED_REDIRECT_URI&scope=Files.Read Files.Read.All Files.ReadWrite Files.ReadWrite.All
在您在Postman的请求中填写信息后,我建议使用浏览器和网络检查来使用Microsoft账户登录并允许该应用程序。您可以通过网络检查获取访问令牌。
2. 列出OneDrive根目录文件:
https://graph.microsoft.com/v1.0/me/drive/root/children
Add a new header:
Authorization
With value:
Bearer ACCESS_TOKE_OF_STEP_1
在我的Angular应用程序中,由于这种交互方式限制了对OneDrive文件的访问,我改变了我的身份验证方法,使用
Microsoft Authentication Library(MSAL)来避免每次需要发送API请求时打开一个弹出窗口来验证有效的Microsoft账户。