我在尝试使用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:
答案 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 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]Personal Microsoft accounts only
或 Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)
并且每个都有不同的端点来获取访问令牌(您可以看到点击 endpoint
按钮,靠近删除应用程序页面中的应用程序按钮)。 [3]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 请求时打开一个弹出窗口来验证有效的微软帐户。
答案 2 :(得分:0)
在同一租户中使用您的帐户登录后,您是否可以通过浏览器手动访问OneDrive内容(包括Excel文件)?
如果您可以手动访问驱动器和文件,请使用图形资源管理器https://developer.microsoft.com/en-us/graph/graph-explorer使用同一帐户登录并拨打电话以获取云端硬盘内容。当您登录时,系统会向您显示一份同意页面,其中列出了需要授予的权限。请记下这些权限,并检查权限是否与访问驱动器所需的权限相匹配。
如果您还没有相应的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。在我能找到的任何地方,这都还不清楚。