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

如何通过应用注册实现PnP.Core认证以获取PnPContext

问题背景

我正在更新现有通过PnPCoreSDKClient/PnPContexts访问SharePoint文档库的逻辑,所有单元测试已通过,现在需要连接生产环境,因此想要添加通过应用注册(客户端ID、客户端密钥、租户ID)进行认证的逻辑。

现有代码
using System;
using PnP.Core.Services;
using System.Threading.Tasks;

namespace Widgets.CopyFileClass
{

    public interface IPnPCoreSDKClient
    {
        Task<IPnPContext> GetPnPContextAsync(string siteUrl);
    }

    public class PnPCoreSDKClient : IPnPCoreSDKClient
    {
        private readonly IPnPContextFactory _contextFactory;
       
        public PnPCoreSDKClient(IPnPContextFactory contextFactory)
        {
            _contextFactory = contextFactory;
        }

        public async Task<IPnPContext> GetPnPContextAsync(string siteUrl)
        {
            try
            {
                // 尝试创建URI并获取PnPContext
                var uri = new Uri(siteUrl);
                return await _contextFactory.CreateAsync(uri);
            }
            catch (UriFormatException ex)
            {
                throw new ArgumentException("提供的站点URL格式无效。", ex);
            }
            catch (Exception ex)
            {
                throw new ApplicationException("获取PnPContext时发生错误。", ex);
            }
        }
    }
}
已尝试方案

我找到了PnP Core的OAuthAuthenticationProvider类文档,但这个类只支持传入租户ID和客户端ID,没有客户端密钥参数,我猜测这不是正确的使用类,希望得到方向指引。

解决方案

要实现基于客户端ID、客户端密钥、租户ID的应用权限认证,你需要使用**ClientSecretAuthenticationProvider**类,而非OAuthAuthenticationProvider。具体步骤如下:

1. 安装依赖包

确保已安装PnP.Core.Auth NuGet包,它包含所有PnP Core的认证提供者:

Install-Package PnP.Core.Auth

2. 配置认证与依赖注入

在服务配置代码(如Program.cs或Startup类)中,注册认证提供者和PnP上下文工厂:

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

// 替换为你的应用注册信息
var clientId = "你的客户端ID";
var clientSecret = "你的客户端密钥";
var tenantId = "你的租户ID";

// 创建客户端密钥认证提供者实例
var authProvider = new ClientSecretAuthenticationProvider(
    clientId,
    clientSecret,
    tenantId);

// 注册PnP Core服务并绑定认证提供者
services.AddPnPCore(options =>
{
    options.DefaultAuthenticationProvider = authProvider;
});

// 注册你的自定义PnP客户端
services.AddScoped<IPnPCoreSDKClient, PnPCoreSDKClient>();

3. 保留现有业务代码

你的PnPCoreSDKClient实现无需修改,IPnPContextFactory会自动使用配置好的ClientSecretAuthenticationProvider创建带认证的PnPContext。

注意事项

  • 确认你的应用注册已在SharePoint中申请并获得管理员同意的权限(比如Sites.ReadWrite.All),否则会出现权限不足的错误。
  • ClientSecretAuthenticationProvider是专为应用权限场景设计的,完全匹配你需要的客户端ID+密钥认证方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:43:23