租户没有 SPO 许可证

Ken*_*ham 12 onedrive microsoft-graph-api

我在尝试使用 Microsoft Graph 编写脚本以将 Excel 文件上传到 OneDrive 然后读取 Excel 文件时出错。

我按照Microsoft 文档在没有用户的情况下获取访问令牌。我成功获得了访问令牌,但在使用访问令牌调用 OneDrive API 时出错。

这是回应:

{
    "error": {
        "code": "BadRequest",
        "message": "Tenant does not have a SPO license.",
        "innerError": {
            "request-id": "5ec31d17-3aea-469f-9078-de3608f11d0d",
            "date": "2017-10-10T04:34:05"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在调用图形 API 时需要拥有 SPO 许可证以及如何获取它。由于此错误消息,所以我正在尝试购买 SPO 许可证。

根据此文档,我认为我应该在许可证页面中看到许多产品,但是在使用 Azure 门户登录并转到许可证页面时,我只看到 2 个产品:Azure AD Premium 和 Enterprise Mobility Suite:

截屏

Kik*_*uto 14

如果其他人也有类似的问题,我在使用个人 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)您将收到此错误。此外,您需要使用正确的端点以避免错误。

主要问题是我们的帐户类型。作为个人帐户,访问一个驱动器文件有一些限制。这些限制是:

  1. 您只能使用Oauth2 Code FlowOauth2 Token Flow。两者都是交互式方法。[ 1 ][ 2 ]
  2. 您在 AAD 中注册的应用程序需要是Personal Microsoft accounts onlyAccounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)每个都有不同的端点来获取访问令牌(您可以看到单击endpoint应用程序页面中删除应用程序按钮附近的按钮)。[ 3 ]
  3. 为在 AAD 中注册的应用程序启用这些委派权限:Files.ReadFiles.Read.AllFiles.ReadWriteFiles.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.

  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
Run Code Online (Sandbox Code Playgroud)

根据 Postman 的要求填写信息后,我建议使用浏览器和网络检查来使用 Microsoft 帐户登录并允许该应用程序。您将通过网络检查获取访问令牌。

  1. 列出一个驱动器根文件:
https://graph.microsoft.com/v1.0/me/drive/root/children
Add a new header:
Authorization
With value:
Bearer ACCESS_TOKE_OF_STEP_1
Run Code Online (Sandbox Code Playgroud)

在我的角度应用程序中,由于这种访问一个驱动器文件的交互方式受到限制,我将身份验证方法更改为使用Microsoft 身份验证库(MSAL),以避免每次需要发送 API 请求时打开弹出窗口来验证有效的 Microsoft帐户。

  • @JeffinJ正如我在限制1中所说的。对于个人帐户,您只能使用Oauth2 Code Flow或Oauth2 Token Flow,并且两者都是交互式方法。您只能将 Lient_credential 流或资源所有者流与企业帐户一起使用。我的第一次尝试是使用 client_credential 流程,然后我发现了限制并将所有架构更改为交互式方法,正如我在答案末尾所说的那样 (4认同)

cri*_*uin 13

万一其他人遇到类似问题,我在使用 Office 365 家庭版许可证时收到相同的错误消息。事实证明,SPO 代表 SharePoint Online,您需要一个 Office 365 商业版帐户才能拥有它。因此,据我所知,如果没有 SharePoint(仅随营业执照提供),您就无法使用 Microsoft Graph API 访问 OneDrive。这在我能找到的任何地方都没有说清楚。

  • 除了 Microsoft Graph API 之外,是否还有其他 API 可以使用 Office 365 家庭版许可证访问 OneDrive? (2认同)

Dan*_*SFT 10

在这里回答几件事。

背景:Microsoft Graph 是许多 Microsoft 云服务(如 Office 365、Azure Active Directory、EMS(企业移动套件)、个人 Outlook、个人 OneDrive 等)的开发人员网关或 API。API 的使用是免费的,但要访问其背后的数据,您需要实际拥有这些服务 - 在某些情况下它们可能是免费的,而在其他情况下您可能需要为它们付费。

至于将 Office 365 添加到现有租户。我相信您已经使用 Microsoft 帐户注册了 Azure。这意味着你已经拥有 Azure Active Directory 租户。您仍然可以为该租户购买/获取 Office 365。您需要做的就是在您的租户中创建一个新的 Azure AD 用户(不是 Microsoft 帐户),并使他们成为公司管理员。然后您应该能够注册 Office 365 - 如果它询问您是否已经有租户或帐户,请使用您刚刚创建的 AAD 帐户登录。瞧,你应该有一个 Azure AD 租户,订阅了 Azure,现在订阅了 Office 365。

希望这可以帮助,