如果其他人遇到类似问题,我在使用个人 Microsoft 帐户时会收到相同的错误消息,就像 OP 一样。
因此,如果您在已注册的 Azure Active Directory(AAD) 应用程序中使用个人帐户,则该类型不是 Personal Microsoft accounts only 或 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox),您将收到此错误。此外,您需要使用正确的端点以避免错误。
主要问题是我们的帐户类型。作为个人帐户,访问一个驱动器文件有一些限制。这些限制是:
- 您只能使用
Oauth2 Code Flow 或Oauth2 Token Flow。两者都是交互式方法。 [1][2]
- 您在 AAD 中注册的应用程序需要是
Personal Microsoft accounts only 或 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox) 并且每个都有不同的端点来获取访问令牌(您可以看到单击应用程序页面中删除应用程序按钮附近的 endpoint 按钮) . [3]
- 为您在 AAD 中注册的应用启用这些委派权限:
Files.Read、Files.Read.All、Files.ReadWrite 和 Files.ReadWrite.All。
考虑到这些限制,您可以按照以下两个步骤在 Postman 中设置工作流(我使用的是 Personal Microsoft accounts only 应用程序类型的端点并使用 Oauth2 Code Flow):
Important note: To use code flow, you need to enable Access tokens in Implicit grant and hybrid flows on Authentication ADD app sidebar menu.
- 获取访问令牌:
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 帐户登录并允许该应用程序。您正在通过网络检查获取访问令牌。
- 列出一个驱动器根文件:
https://graph.microsoft.com/v1.0/me/drive/root/children
Add a new header:
Authorization
With value:
Bearer ACCESS_TOKE_OF_STEP_1
在我的 Angular 应用程序中,由于这种交互方式限制访问一个驱动器文件,我将身份验证方法更改为使用 Microsoft Authentication Library(MSAL) 以避免每次需要发送 API 请求时打开弹出窗口来验证有效的 Microsoft 帐户.