使用合规O365商业账户访问SharePoint站点时遇Graph API SPO许可证错误
错误详情
Failed to get site ID. Status code: 400 { 'error': { 'code': 'BadRequest', 'message': 'Tenant does not have a SPO license.', 'innerError': { 'date': '2024-05-22T12:52:33', 'request-id': 'cd207c1f-5bbc-435d-b6e3-94170d9e6aff', 'client-request-id': 'cd207c1f-5bbc-435d-b6e3-94170d9e6aff' } } }
当前配置情况
Azure AD应用注册配置
- 已创建应用注册并授予
Sites.ReadWrite.All和Files.ReadWrite.All权限 - 已为这些权限授予管理员同意
SharePoint权限配置
- 已在站点的
_layouts/15/appinv.aspx页面添加应用,使用的权限请求XML:
<AppPermissionRequests> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" /> </AppPermissionRequests>
许可证情况
- 已验证租户拥有可用的SharePoint Online许可证
- 已为用户分配SharePoint Online许可证
Python脚本信息
- 使用msal库获取访问令牌并向Microsoft Graph API发起请求
- 使用的端点:
https://graph.microsoft.com/v1.0/sites/*.sharepoint.com:/sites/Document_Repository
排查方向
确认租户级SPO许可证启用状态
登录Microsoft 365管理中心,进入账单>许可证,检查SharePoint Online许可证是否已在租户级别启用(而非仅购买未激活),同时确认许可证的分配数量足够且状态正常。验证应用权限类型
确保Azure AD应用中添加的是应用权限而非委派权限。脚本采用服务端模式运行,委派权限无法满足无用户交互的场景。若之前添加的是委派权限,需删除后添加应用权限并重新获取管理员同意。修正Graph API站点端点格式
端点中的*.sharepoint.com需替换为实际租户域名(如contoso.sharepoint.com),通配符会导致API无法识别具体站点。正确的端点示例:https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/Document_Repository确认SharePoint站点应用权限已批准
进入站点设置>应用>已安装的应用,找到目标应用,检查其权限请求是否已被站点管理员批准。未批准的权限请求会导致访问被拒绝。检查访问令牌的权限声明
解码获取到的访问令牌(可使用jwt工具),确认roles声明中包含Sites.ReadWrite.All或Files.ReadWrite.All权限。若令牌中无对应权限,需重新获取令牌或检查应用权限配置。验证租户SharePoint服务启用状态
在Microsoft 365管理中心>设置>组织设置>服务中,确认SharePoint Online服务已启用。若服务未启用,即使有许可证也无法使用相关功能。
内容的提问来源于stack exchange,提问作者Tim Barrow
相关产品推荐
相关产品推荐

