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现代用户名密码认证实现,操作如下:- 安装NuGet包
Microsoft.Identity.Client - 替换认证逻辑代码:
// 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); } - 安装NuGet包
- 检查租户旧版认证策略:如果坚持使用
SharePointOnlineCredentials,请租户管理员在Azure AD安全策略中为该账号开启旧版认证访问例外,避免被全局拦截规则拦截。
内容的提问来源于stack exchange,提问作者Wagish Singh
相关产品推荐
相关产品推荐

