.NET6下用CSOM连接本地SharePoint订阅版遇401授权问题
1. .NET6是否完全支持CSOM?
.NET6完全支持针对本地SharePoint Server的CSOM,但你需要安装对应本地SharePoint版本的CSOM包——你当前安装的Microsoft.SharePointOnline.CSOM是针对SharePoint Online的,不适用于本地部署的SharePoint订阅版。本地SharePoint的CSOM包名为Microsoft.SharePoint.CSOM,该包提供了.NET Standard兼容版本,可直接在.NET6项目中使用。
2. 本地SharePoint Windows身份验证的正确实现方式
你参考的文档是针对SharePoint Online(Azure AD认证)的,本地SharePoint的Windows身份验证需要调整以下几点:
第一步:替换CSOM包
卸载当前的Microsoft.SharePointOnline.CSOM,安装Microsoft.SharePoint.CSOM,注意选择与你本地SharePoint订阅版版本匹配的包版本(例如SharePoint Server 2022对应16.1.x系列版本)。
第二步:修正身份验证代码
本地SharePoint的Windows身份验证需要明确指定身份验证模式,并确保凭据格式正确:
- 若控制台应用在域环境下运行,直接使用默认网络凭据即可;
- 若在非域环境,需使用
NetworkCredential并传入域\用户名格式的账户信息; - 必须设置
AuthenticationMode为Ntlm(对应Windows NTLM认证)。
修正后的代码示例:
using (var clientContext = new ClientContext("http://你的本地SharePoint站点URL")) { // 指定Windows身份验证模式为NTLM clientContext.AuthenticationMode = ClientAuthenticationMode.Ntlm; // 域环境下使用默认凭据 clientContext.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; // 非域环境使用指定账户(格式:域\用户名) // clientContext.Credentials = new System.Net.NetworkCredential("用户名", "密码", "域名"); Web web = clientContext.Web; clientContext.Load(web); clientContext.ExecuteQuery(); Console.WriteLine($"站点标题:{web.Title}"); }
额外排查点
- 确认你使用的账户拥有目标SharePoint站点的访问权限;
- 若遇到Kerberos认证问题,需确保本地SP服务器已配置Kerberos,并调整代码中的
AuthenticationMode为Kerberos。
内容的提问来源于stack exchange,提问作者Raviraj Bhalerao
相关产品推荐
相关产品推荐

