You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#(.NET Framework 4.8)通过证书认证连接SharePoint Online

.NET Framework 4.8 控制台程序通过证书连接 SharePoint Online 示例

前提条件

  • 已在Azure AD完成应用注册并配置证书,且应用拥有SharePoint Online对应权限(如Sites.FullControl.All),权限已获得管理员同意
  • 证书已导出为带私钥的.pfx文件,或已安装至本地证书存储

方法一:使用PnP Framework(推荐,与PnP PowerShell逻辑一致)

1. 安装NuGet包

在NuGet包管理器控制台执行:
Install-Package PnP.Framework

2. 示例代码

using System;
using System.Security.Cryptography.X509Certificates;
using PnP.Framework;

namespace SPOConsoleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 替换为你的实际参数
            string tenantId = "你的Azure AD租户ID";
            string clientId = "应用注册的客户端ID";
            string siteUrl = "https://你的租户名.sharepoint.com/sites/目标站点";
            string certPath = @"C:\Cert\YourCertificate.pfx";
            string certPassword = "证书保护密码";

            try
            {
                // 加载证书
                var certificate = new X509Certificate2(
                    certPath, 
                    certPassword, 
                    X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);

                // 创建认证上下文
                using (var ctx = new AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(
                    siteUrl, clientId, tenantId, certificate))
                {
                    // 验证连接:获取站点标题
                    ctx.Load(ctx.Web, web => web.Title);
                    ctx.ExecuteQuery();

                    Console.WriteLine($"成功连接到站点:{ctx.Web.Title}");

                    // 扩展操作示例:获取站点所有列表
                    // ctx.Load(ctx.Web.Lists, lists => lists.Include(list => list.Title));
                    // ctx.ExecuteQuery();
                    // foreach (var list in ctx.Web.Lists)
                    // {
                    //     Console.WriteLine($"列表:{list.Title}");
                    // }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"连接失败:{ex.Message}");
            }

            Console.ReadLine();
        }

        // 可选:从本地证书存储加载证书的方法
        private static X509Certificate2 GetCertFromStore(string thumbprint)
        {
            using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
            {
                store.Open(OpenFlags.ReadOnly);
                var certs = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
                if (certs.Count > 0) return certs[0];
                throw new Exception($"未找到指纹为{thumbprint}的证书");
            }
        }
    }
}

方法二:使用原生SharePoint CSOM+MSAL

1. 安装NuGet包

Install-Package Microsoft.SharePointOnline.CSOM
Install-Package Microsoft.Identity.Client

2. 示例代码

using System;
using System.Security.Cryptography.X509Certificates;
using Microsoft.SharePoint.Client;
using Microsoft.Identity.Client;

namespace SPOCSOMDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            string tenantId = "你的租户ID";
            string clientId = "应用客户端ID";
            string siteUrl = "https://你的租户名.sharepoint.com/sites/目标站点";
            string certPath = @"C:\Cert\YourCertificate.pfx";
            string certPassword = "证书密码";

            // 加载证书
            var cert = new X509Certificate2(certPath, certPassword, X509KeyStorageFlags.Exportable);

            // 构建MSAL客户端获取令牌
            var msalClient = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithTenantId(tenantId)
                .WithCertificate(cert)
                .Build();

            var authResult = msalClient.AcquireTokenForClient(new[] { $"{new Uri(siteUrl).GetLeftPart(UriPartial.Authority)}/.default" })
                .ExecuteAsync().GetAwaiter().GetResult();

            // 初始化CSOM上下文
            using (var ctx = new ClientContext(siteUrl))
            {
                ctx.ExecutingWebRequest += (sender, e) =>
                {
                    e.WebRequestExecutor.RequestHeaders["Authorization"] = $"Bearer {authResult.AccessToken}";
                };

                // 验证连接
                ctx.Load(ctx.Web, web => web.Title);
                ctx.ExecuteQuery();

                Console.WriteLine($"站点标题:{ctx.Web.Title}");
            }

            Console.ReadLine();
        }
    }
}

关键注意事项

  • 应用注册的权限必须经过管理员同意,否则会触发权限不足错误
  • 证书文件需确保程序有读取权限,使用本地证书存储比文件方式更安全
  • 权限配置需匹配实际操作需求,避免过度授权

内容的提问来源于stack exchange,提问作者SKota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:27:16