【问题标题】:Tenant does not have a SPO license租户没有 SPO 许可证
【发布时间】:2017-10-18 02:49:34
【问题描述】:

我在尝试使用 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 门户登录并转到许可证页面时,我只看到 2 个产品:Azure AD Premium 和 Enterprise Mobility Suite:

【问题讨论】:

  • 作为许可问题的题外话

标签: microsoft-graph-api onedrive


【解决方案1】:

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

【讨论】:

  • 除了 Microsoft Graph API 之外,是否还有其他 API 可以通过 Office 365 Home 许可证访问 OneDrive?
  • 我真的不确定,抱歉!
  • @crimson_penguin,此信息部分正确。正如我在here 中指出的那样,您可以使用您的个人帐户访问 Graph API。但实际上,如果您使用的是企业帐户,此信息是真实的,您将需要购买营业执照。检查 Graph Explorer developer.microsoft.com/en-us/graph/graph-explorer 以探索您的帐户的功能。
【解决方案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 AD 租户,订阅了 Azure,现在订阅了 Office 365。

希望这会有所帮助,

【讨论】:

  • 非常感谢@Dan Kershaw - MSFT :)。你的解释对我帮助很大。我将按照您的指示为我的租户获取 O365 订阅。根据我的需要(服务到服务调用将excel文件上传到Onedrive并使用MS Excel API读取它),你能告诉我哪个产品适合我products.office.com/en/…吗?
  • 所有这些都适合您,因为它们都包含 OneDrive 服务。 Office 365 Business Essentials 对您来说是最便宜且可能是最好的选择,因为它实际上会点亮更多 Microsoft Graph 功能 - 如果您将来想要做的不仅仅是在 OneDrive 中上传/处理 Excel 文件。
  • 非常感谢@Dan :)。
  • 这完全没有帮助... OneDrive 有免费的个人套餐,而 Office365 是付费订阅。您是说 OneDrive API 支持仅适用于付费订阅 Office 的用户吗? (它不适用于 OneDrive 个人版?)stackoverflow.com/questions/60313963/…
  • @DanKershaw-MSFT 您能否详细说明“让他们成为公司管理员”?
【解决方案3】:

如果其他人遇到类似问题,我在使用个人 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 请求时打开弹出窗口来验证有效的 Microsoft 帐户.

【讨论】:

  • 这适用于用户可以从浏览器登录的地方。如果我们想使用 client_credential 流或资源所有者流获取令牌呢
  • @JeffinJ 正如我在限制1中所说。对于个人帐户,您只能使用Oauth2 Code Flow或Oauth2 Token Flow,两者都是交互方式。您只能将 lient_credential 流或资源所有者流与企业帐户一起使用。我的第一次尝试是使用 client_credential 流程,然后我发现了限制并将我的所有架构更改为交互式方法,正如我在答案末尾所说的那样
  • 您听说过 rclone。它绕过了用户交互,并无条件地做到这一点
  • @JeffinJ 如果你在谈论这个rclone.org/onedrive 看起来是个不错的选择!我不知道这个选项。但现在对我来说已经太晚了。
  • 如果您只需要将文件从服务器同步到一个驱动器,或者使用您的服务器作为临时空间来存储文件,然后将文件上传到一个驱动器,这是一个不错的选择。 rclone 自动处理所有其他事情
【解决方案4】:
  1. 在同一租户中使用您的帐户登录后,您是否可以通过浏览器手动访问 OneDrive 内容(包括 Excel 文件)?

  2. 如果您能够手动访问驱动器和文件,请使用 Graph Explorer 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。

【讨论】:

  • 1.我可以访问Onedrive site 上传一个excel 文件然后阅读它。 2. 我可以使用 Graph Explore 访问my root drive directory 并且我可以在 API 的响应中看到上传的文件。但我无法通过Excel API 读取文件。我收到了这个错误:{"code": "generalException", "message": " Exception While Processing"}
  • 3.我无法使用 Microsft 帐户设置 Office-365。看来我需要一个工作帐户来执行您的建议。但是,如果我设置了一个工作帐户,我如何将此帐户链接到我现有的租户?
【解决方案5】:

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

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

【讨论】:

  • 感谢您的帮助。你的意思是如果我购买 Office 365,我将能够使用 OneDrive 和 Excel API?我的 Microsoft 帐户似乎无法购买 Office 365,似乎只能用于工作帐户。如果我注册了一个工作帐户并购买了 Office 365,如何将其链接到我现有的 Azure Active Directory 租户?
  • 您可以通过您的 Microsoft 帐户使用这些 API,但您需要使用 [v2 Endpoint](massivescale.com/microsoft-v2-endpoint-primer/)。您用来注册您的应用程序(从屏幕截图)是 v1,它只支持工作/学校帐户。
  • 非常感谢。我已阅读您发送的帖子。它对我不起作用,因为我想做的是“服务到服务调用”。 API 将在没有用户的情况下在后台调用,无需重定向。这个想法是我的应用程序将生成一个报告(Excel 文件),我需要将其上传到 Onedrive 并能够读取该文件(通过使用 API)。一切都将上传/存储到我的 Onedrive。您认为 V2 端点可以支持我的需求吗?或者如果您知道其他可以做到这一点的方法,请与我分享?
  • 您使用个人 (MSA) 帐户为服务(也称为客户凭证流程)提供服务。您可以将其用于工作/学校 (AAD) 租户。这是因为您的个人 OneDrive 是公共租户的一部分,而 OneDrive for Business 是私人订阅的一部分。为此,您需要一个商业 O365 租户。
  • 如上所述,您不能将客户端凭据/仅限应用程序用于个人帐户。
【解决方案6】:

要添加到Kikutos' answer 答案,您可以使用this Azure sample 通过 MSAL.NET 获取令牌。
您唯一需要更改的是Instance 属性,需要将其设置为:

https://login.microsoftonline.com/consumers/

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多