应用注册+Client Secret访问SharePoint失败,委托权限正常,求原因
权限范围没选对
别把委托权限和应用权限搞混了。你得在Azure AD应用注册的「API权限」里,添加SharePoint的应用权限(比如Sites.ReadWrite.All、Sites.FullControl.All),而不是委托权限的读写权限。而且必须完成管理员同意,不然权限根本不生效。Token请求的资源参数错了
拿Token的时候,指定的resource参数得是SharePoint的站点根域名,比如https://xxx.sharepoint.com,要是写成Graph API的https://graph.microsoft.com,生成的Token根本没法用来访问SharePoint。Token获取的端点或权限格式不对
用v2端点拿Token的话,权限范围得写成https://xxx.sharepoint.com/.default;要是用旧的v1端点,范围直接填权限标识就行。端点要是选错了,或者范围格式不对,Token肯定无效。没给应用分配站点级权限
就算Azure AD里给了全局应用权限,有些场景下还得在具体站点里给应用分配权限。比如用PowerShell跑这两句:Connect-SPOService -Url https://xxx-admin.sharepoint.com Set-SPOsite -Identity https://xxx.sharepoint.com/sites/你的站点名 -AppPrincipalAccountName 应用的ClientID -Permissions FullControl没这一步,应用可能还是碰不了目标站点。
API调用的端点用错了
应用权限访问SharePoint得用SharePoint自己的REST API端点,比如https://xxx.sharepoint.com/sites/你的站点名/_api/web/lists,别跑去用Graph API的端点——除非你给应用加了Graph的应用权限,不然肯定失败。Token本身有问题
把生成的Access Token拿到jwt.io解析下,看看这俩字段:aud(受众)是不是SharePoint的域名,不是Graph的roles里有没有你给的应用权限(比如Sites.ReadWrite.All)
这俩不对的话,就是Token生成环节出问题了。
内容的提问来源于stack exchange,提问作者Rahul Myadam

