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

如何通过交互式MFA授权.NET控制台应用读取SharePoint文件

在.NET控制台应用中实现SharePoint交互式MFA登录(模拟PnP PowerShell行为)

实现方案:使用PnP Core SDK

PnP Core SDK和你当前使用的PnP PowerShell同源,是官方推荐的SharePoint开发库,完美支持交互式MFA登录,无需租户管理员权限,仅需依托个人账号的现有访问权限即可实现需求。

步骤1:安装NuGet包

在控制台项目中安装以下两个必要包:

Install-Package Microsoft.PnP.Core
Install-Package Microsoft.PnP.Core.Auth

步骤2:编写核心代码

通过交互式认证提供器触发浏览器登录流程,用户完成MFA验证后即可访问SharePoint内容,代码示例:

using Microsoft.PnP.Core.Auth;
using Microsoft.PnP.Core.Services;

var siteUrl = "https://[tenantName].sharepoint.com";

// 初始化交互式认证提供器,使用PnP官方公共应用ID(无需自行注册)
var authProvider = new InteractiveAuthenticationProvider(
    siteUrl,
    "31359c7f-bd7e-475c-86db-fdb8c937548e",
    new[] { $"https://[tenantName].sharepoint.com/.default" });

// 创建PnP上下文工厂及配置
var pnpContextFactory = new PnPContextFactory();
var contextOptions = new PnPContextOptions(siteUrl)
{
    AuthenticationProvider = authProvider
};

// 触发登录流程,获取PnP上下文
using var context = await pnpContextFactory.CreateAsync(contextOptions);

// 测试访问:获取当前站点标题
var web = await context.Web.GetAsync();
Console.WriteLine($"当前站点:{web.Title}");

// 示例:读取文档库中的文件
var docLib = await context.Web.Lists.GetByTitleAsync("Documents");
var files = await docLib.RootFolder.Files.GetAsync();
foreach (var file in files)
{
    Console.WriteLine($"文件名称:{file.Name}");
}

关键说明

  • 应用ID选择:代码中使用的是PnP团队维护的公共应用ID,已通过微软验证,无需你自行在Azure AD注册应用。如果需要自定义,也可以用个人账号在Azure Portal注册一个「公共客户端应用」(重定向URI填http://localhost),替换上述ID即可。
  • 权限范围:.default范围会自动继承你个人账号对目标站点的现有权限,无需额外申请权限(因为你已经能访问目标文件)。
  • 登录体验:运行程序后会弹出系统默认浏览器,引导你完成账号密码输入和MFA验证,验证成功后程序即可访问你有权限的SharePoint内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:46:35