租户没有SPO许可证

时间:2017-10-18 02:49:34

标签: microsoft-graph onedrive

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

我跟着Microsoft documentation获取了没有用户的访问令牌。我成功获得了访问令牌,但在使用访问令牌调用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"
        }
    }
}

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

根据this document,我认为我应该在许可页面中看到许多产品,但在使用Azure Portal登录并转到许可页面时,我只看到2个产品:Azure AD Premium和Enterprise Mobility Suite:

screenshot

5 个答案:

答案 0 :(得分:2)

在这里回答几件事。

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

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

希望这有帮助,

答案 1 :(得分:1)

如果其他人遇到类似问题,我在使用个人 Microsoft 帐户时也会收到相同的错误消息,就像 OP 一样。

因此,如果您在注册的 Azure Active Directory (AAD) 应用程序中使用个人帐户,则该类型不是 Personal Microsoft accounts onlyAccounts 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

在 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

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

答案 2 :(得分:0)

  1. 在同一租户中使用您的帐户登录后,您是否可以通过浏览器手动访问OneDrive内容(包括Excel文件)?

  2. 如果您可以手动访问驱动器和文件,请使用图形资源管理器https://developer.microsoft.com/en-us/graph/graph-explorer使用同一帐户登录并拨打电话以获取云端硬盘内容。当您登录时,系统会向您显示一份同意页面,其中列出了需要授予的权限。请记下这些权限,并检查权限是否与访问驱动器所需的权限相匹配。

  3. 如果您还没有相应的SPO许可,则可以尝试设置免费的Office-365试用帐户(https://products.office.com/en-in/business/office-365-enterprise-e3-business-software)并测试API。

答案 3 :(得分:0)

OneDrive for Business和Excel API都需要Office 365.根据您的屏幕截图,这看起来像一个独立的Azure Active Directory租户(即未链接到O365)。

SPO许可证消息的原因是OneDrive for Business是一个特殊的SharePoint Online文档库,可以自动为用户配置。

答案 4 :(得分:0)

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