如何在无ADFS的情况下连接本地SharePoint Server 2019 API?
一、不依赖ADFS的App-Only身份验证方式
本地SharePoint 2019原生支持基于证书的App-Only认证,无需ADFS,也不用依赖Azure ACS服务(即你提到的https://accounts.accesscontrol.windows.net/),具体实现步骤和代码如下:
- 在SharePoint服务器上注册应用程序,生成自签名证书(或使用企业证书)
- 为应用分配对应权限(如站点集管理员权限、特定列表权限等)
- 在C# CSOM代码中通过证书加载客户端上下文
using Microsoft.SharePoint.Client; using System.Security.Cryptography.X509Certificates; var siteUrl = "http://你的SharePoint站点地址"; var clientId = "你的应用客户端ID"; var certificatePath = @"C:\证书路径\你的证书.pfx"; var certificatePassword = "证书密码"; // 加载证书 var cert = new X509Certificate2(certificatePath, certificatePassword, X509KeyStorageFlags.Exportable); // 初始化客户端上下文 var ctx = new ClientContext(siteUrl); ctx.AuthenticationMode = ClientAuthenticationMode.Default; ctx.ClientCertificates.Add(cert); ctx.ApplicationName = clientId; // 测试连接 ctx.Load(ctx.Web); ctx.ExecuteQuery(); Console.WriteLine($"站点标题:{ctx.Web.Title}");
二、其他可选身份验证方式
- NTLM域身份验证:若代码在域环境内运行,可直接使用当前用户的域身份连接,无需额外配置:
var ctx = new ClientContext("http://你的SharePoint站点地址"); ctx.Credentials = System.Net.CredentialCache.DefaultCredentials; ctx.Load(ctx.Web); ctx.ExecuteQuery();
- 基本身份验证:需先在SharePoint服务器上启用基本认证(仅限内部网络使用,注意安全风险),代码中传入用户名和密码:
using Microsoft.SharePoint.Client; using System.Security; var ctx = new ClientContext("http://你的SharePoint站点地址"); ctx.Credentials = new SharePointOnlineCredentials("域\\用户名", ConvertToSecureString("密码")); ctx.Load(ctx.Web); ctx.ExecuteQuery(); // 辅助方法:将字符串转为SecureString private static SecureString ConvertToSecureString(string password) { var securePassword = new SecureString(); foreach (char c in password) { securePassword.AppendChar(c); } return securePassword; }
关于App-Only的澄清
你之前接触到的使用ACS的示例是针对SharePoint Online的方案,本地SharePoint 2019的App-Only完全可以脱离ADFS和Azure服务,通过证书方式实现,这是本地部署的原生支持方案。
内容的提问来源于stack exchange,提问作者CodeResearcher
相关产品推荐
相关产品推荐

