DisableCustomAppAuthentication为true时.NET控制台应用如何认证SharePoint Online
首先明确:你注册Azure AD应用时看到的弃用提示,仅针对旧版ACS(SharePoint访问控制服务)应用注册模式,你查询到的标准Azure AD应用注册的应用仅权限方案并未弃用,是目前微软官方推荐的服务端无交互场景的认证方案,完全兼容DisableCustomAppAuthentication=true的租户,无需修改租户级配置。
推荐方案:Azure AD 证书认证的应用仅权限模式
1. Azure AD应用配置步骤
- 进入Azure Active Directory管理中心,注册新的应用,无需配置重定向URI
- 进入注册完成的应用页,打开「API权限」界面,添加SharePoint的应用程序权限:
- 如果需要全租户站点权限,选择对应权限如
Sites.ReadWrite.All - 如果只需要访问特定站点,选择
Sites.Selected权限(安全性更高) - 权限添加完成后,点击「授予管理员同意」完成权限激活
- 如果需要全租户站点权限,选择对应权限如
- 进入「证书和密码」界面,上传你生成的证书(可在Windows Server上用
New-SelfSignedCertificate命令生成自签名证书),记录证书的指纹值
2. 代码实现
首先安装两个NuGet依赖包:PnP.Framework(取代已停止维护的旧版OfficeDevPnP.Core)、Microsoft.SharePointOnline.CSOM
代码示例如下:
static void Main(string[] args) { string siteUrl = "https://***.sharepoint.com/sites/CustomerServiceKB/"; // 替换为你的Azure AD客户端ID string clientId = "xxxxxx-xxxx-xxxx-xxxx-xxxxxx"; // 替换为你的Azure AD租户ID string tenantId = "xxxxxx-xxxx-xxxx-xxxx-xxxxxx"; // 替换为你上传的证书指纹 string certThumbprint = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; using (var authManager = new PnP.Framework.AuthenticationManager(clientId, certThumbprint, tenantId)) { using (var context = authManager.GetContext(siteUrl)) { // 原有CSOM逻辑无需修改,直接运行即可 context.Load(context.Web, w => w.Title); context.ExecuteQuery(); Console.WriteLine($"当前站点名称:{context.Web.Title}"); } } }
3. 服务器部署配置
- 将证书导出为PFX格式,导入到Windows Server 2019本地计算机的「个人」证书存储中
- 给任务计划程序的运行账号授予证书私钥读取权限:打开证书管理器,找到对应证书右键选择「所有任务」-「管理私钥」,添加任务运行账号并授予读取权限即可
备选方案:Azure AD 客户端密钥认证
如果暂时不想配置证书,也可以使用客户端密钥模式,安全性略低于证书模式,适合测试场景:
- 在Azure AD应用的「证书和密码」页生成客户端密钥并记录
- 代码修改为如下即可:
using (var authManager = new PnP.Framework.AuthenticationManager(clientId, clientSecret, tenantId)) { using (var context = authManager.GetContext(siteUrl)) { // 原有CSOM逻辑 } }
内容的提问来源于stack exchange,提问作者John John
相关产品推荐
相关产品推荐

