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

C#上传文件到SharePoint时报账号密码不匹配异常求助

C# SharePoint上传文件账号密码认证失败解决方案

可执行排查修复步骤:

  • 检查变量赋值错误:你代码中初始化密码存储在passwordSP变量,生成SecureString时调用的是Password变量,请确认是否已将passwordSP正确赋值给Password,避免传空或错误的密码值。
  • 修正目标文档库名称:你初始化定义的文档库名称为BG Docs,但上传代码中写死读取默认Documents库,将List libraryList = clientContext.Web.Lists.GetByTitle("Documents");修改为List libraryList = clientContext.Web.Lists.GetByTitle(documentLibrary);,和实际使用的库名保持一致。
  • 确认站点权限:请站点管理员确认该账号已分配目标站点https://(*company domain*).sharepoint.com/sites/BankGuaranteeManagement/的至少编辑权限,仅Office门户登录权限不代表拥有SharePoint站点访问权限。
  • 替换为现代认证流:部分租户禁用了Legacy旧版认证,SharePointOnlineCredentials依赖旧版认证会被拦截,可改用MSAL现代用户名密码认证实现,操作如下:
    1. 安装NuGet包 Microsoft.Identity.Client
    2. 替换认证逻辑代码:
    // 1. 获取Access Token
    var tenantId = "你的Azure AD租户ID";
    // 可使用SharePoint通用公共客户端ID,也可自行在Azure AD注册应用
    var clientId = "31359c7f-bd7d-46fc-bc14-42f45dd408b0"; 
    var scopes = new string[] { "https://*.sharepoint.com/.default" };
    
    var pca = PublicClientApplicationBuilder
        .Create(clientId)
        .WithTenantId(tenantId)
        .Build();
    
    var securePassword = new SecureString();
    foreach (char c in passwordSP) securePassword.AppendChar(c);
    var tokenResult = await pca.AcquireTokenByUsernamePassword(scopes, userNameSP, securePassword).ExecuteAsync();
    
    // 2. 给ClientContext注入Token
    using (ClientContext clientContext = new ClientContext(siteUrl))
    {
        clientContext.ExecutingWebRequest += (sender, args) =>
        {
            args.WebRequestExecutor.RequestHeaders["Authorization"] = $"Bearer {tokenResult.AccessToken}";
        };
        
        // 原有上传逻辑保持不变
        Web web = clientContext.Web;
        List libraryList = clientContext.Web.Lists.GetByTitle(documentLibrary);
        Folder folder = libraryList.RootFolder;
        clientContext.Load(folder, f => f.ServerRelativeUrl);
        clientContext.ExecuteQuery();
        serverRelativeURL = folder.ServerRelativeUrl;
    
        using System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
        Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, $"{serverRelativeURL}/{System.IO.Path.GetFileName(filePath)}", fs, true);
    }
    
  • 检查租户旧版认证策略:如果坚持使用SharePointOnlineCredentials,请租户管理员在Azure AD安全策略中为该账号开启旧版认证访问例外,避免被全局拦截规则拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:15:03