使用Microsoft Graph API更新用户skills/schools时提示租户无SPO许可证错误
我之前处理过类似的问题,咱们先拆解下你遇到的情况:
你用Graph API的PATCH请求更新自己的用户信息时,修改businessPhones这类基础属性没问题,但更新skills或schools就报错,错误提示明确说了Tenant does not have a SPO license(租户没有SharePoint Online许可证)。
问题根源
这是因为skills、schools、interests这类字段并不是Azure AD的基础用户属性,它们属于SharePoint Online用户配置文件的扩展属性。Graph API在修改这些字段时,会校验租户是否拥有SPO许可证——没有的话就会拒绝请求,而businessPhones、displayName这类是Azure AD原生支持的基础属性,不需要额外许可证就能修改。
解决方案
根据你的需求,有两种处理方式:
方式一:添加SPO许可证
如果你的业务确实需要使用这些原生字段,那需要给租户购买并分配SharePoint Online相关的许可证(比如Office 365 E3/E5、SharePoint Online Plan 1/2等)。许可证生效后,再重新发送PATCH请求就能正常更新这些字段了。方式二:使用自定义扩展属性替代
如果不想为了这几个字段购买SPO许可证,建议用Azure AD的自定义扩展属性来存储技能、学校这类信息。你可以通过Graph API创建自定义扩展,然后用它来替代原生的skills/schools字段,这样就完全不依赖SPO了。
举个例子,创建自定义扩展后,更新请求大概是这样的:
PATCH https://graph.microsoft.com/v1.0/me Content-Type: application/json { "extension_<your-extension-id>_customSkills": ["Python", "Azure"] }
附你的请求和错误信息
你的请求示例:
PATCH https://graph.microsoft.com/v1.0/me Content-Type: application/json { "skills": ["skills-value"] }
返回的错误:
{ "error": { "code": "BadRequest", "message": "Tenant does not have a SPO license.", "innerError": { "request-id": "804948b5-f087-4be8-bdf0-ab49dccf7efc", "date": "2018-04-14T17:55:52" } } }
内容的提问来源于stack exchange,提问作者user9646415

