.NET Worker Service通过OAuth访问SharePoint Online文件时出现401未授权/访问被拒错误
看起来你已经走完了应用注册和权限配置的大部分流程,401未授权错误通常是几个容易忽略的细节导致的,我帮你梳理几个可能的问题点:
确认管理员权限授予的有效性
你提到已经完成了管理员同意操作,但要确保是全局管理员或SharePoint管理员执行的授权,并且在Azure AD应用注册的「API权限」页面中,Sites.FullControl.All权限的状态显示为「已授予[你的租户名称]」(带有绿色对勾标识)。如果是普通管理员操作,可能无法完成租户级别的权限授予,导致权限实际上未生效。检查Access Token的受众(Audience)是否正确
你可以将获取到的access token复制到jwt.ms工具中解码,查看aud字段的值是否与你的SharePoint站点根域名一致(也就是https://myname.sharepoint.com)。如果aud字段是其他值(比如https://graph.microsoft.com),说明你请求token时的Scope设置错误——正确的Scope应该是https://myname.sharepoint.com/.default(必须与站点根域名完全匹配),受众不匹配会直接导致SharePoint拒绝你的访问请求。排查站点级别的权限限制
虽然Sites.FullControl.All是租户级别的应用权限,但如果你的目标站点是私人站点或者设置了严格的权限隔离策略,可能需要额外在站点内显式授予应用权限。你可以用SharePoint管理员账号访问站点的「站点权限」→「高级权限设置」→「授予权限」,添加你的应用注册名称(或应用的Client ID),并授予「完全控制」权限后再进行测试。验证Client Secret的有效性
虽然你能成功获取到access token,但还是建议检查一下Client Secret是否过期(在Azure AD应用注册的「证书和密码」页面查看过期时间),或者代码中是否输入错误——有时候复制粘贴时会多添空格或遗漏字符,导致token的权限验证环节失败。
另外,再确认一下代码中的siteUrl是否与实际站点的根URL完全一致(末尾的斜杠不影响,但域名和站点路径必须准确),你的现有认证逻辑是正确的,只要上述几个细节没问题,应该就能正常访问SharePoint站点了。
备注:内容来源于stack exchange,提问作者robiwahn

