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

控制台应用调用SharePoint出现账号密码不匹配错误求助

解决SharePoint Online控制台应用登录报错:"The sign-in name or password does not match one in the Microsoft account system"

问题描述

我的控制台应用项目此前运行完全正常,上周突然无法运行,本地调试时出现错误提示:"The sign-in name or password does not match one in the Microsoft account system"。
已尝试操作:

  • 使用同一账号密码手动登录SharePoint网站,可正常登录并访问目标文件夹。
  • 手动登录未触发电话、短信验证,怀疑账号未启用MFA。
    备注:该账号为客户账号,无过多权限核查。

相关代码:

using (ClientContext ctx = new ClientContext(ConfigurationManager.AppSettings.Get("SharePointApiUrl")))
{
     string password = ConfigurationManager.AppSettings.Get("SharePointPassword");
     string account = ConfigurationManager.AppSettings.Get("SharePointAccount");
     var secret = new System.Security.SecureString();
     foreach (char c in password)
     {
           secret.AppendChar(c);
     }
     ctx.Credentials = new SharePointOnlineCredentials(account, secret);
     ctx.Load(ctx.Web);
     ctx.ExecuteQuery();
}

排查方向与解决方法

1. 检查配置文件的密码转义问题

如果密码包含特殊字符(如&、"、\),通过ConfigurationManager.AppSettings读取时可能被自动转义,导致传递的密码与真实密码不符。可以先在代码中硬编码账号密码进行测试,若测试通过,再修改配置文件:对特殊字符使用XML实体转义(比如&代替&)。

2. 切换到现代身份验证方式

即使账号未启用MFA,租户可能近期开启了强制现代身份验证,而SharePointOnlineCredentials属于旧版验证方式,可能不再被支持。推荐改用OAuth 2.0客户端凭据流(应用权限):

  • 在Azure AD中注册应用,授予SharePoint的应用权限(如Sites.Read.All)
  • 使用客户端凭据获取令牌访问,示例代码:
using Microsoft.Identity.Client;
using Microsoft.SharePoint.Client;
using System.Configuration;

string siteUrl = ConfigurationManager.AppSettings.Get("SharePointApiUrl");
string clientId = ConfigurationManager.AppSettings.Get("ClientId");
string clientSecret = ConfigurationManager.AppSettings.Get("ClientSecret");
string tenantId = ConfigurationManager.AppSettings.Get("TenantId");

var scopes = new[] { $"https://{new Uri(siteUrl).Host}/.default" };
var app = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithClientSecret(clientSecret)
    .WithTenantId(tenantId)
    .Build();

var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
using (ClientContext ctx = new ClientContext(siteUrl))
{
    ctx.ExecutingWebRequest += (sender, e) =>
    {
        e.WebRequestExecutor.RequestHeaders["Authorization"] = $"Bearer {result.AccessToken}";
    };
    ctx.Load(ctx.Web);
    await ctx.ExecuteQueryAsync();
}

3. 确认账号密码的非交互式登录限制

租户可能配置了条件访问策略,禁止该账号进行非交互式登录(控制台应用属于此类场景),即使MFA未启用。需要联系客户检查Azure AD的条件访问规则,确认是否允许该账号的非交互式访问。

4. 排查密码过期或策略限制

虽然手动登录正常,但租户可能对非交互式登录设置了特殊密码策略,或账号密码近期更新但配置文件未同步。联系客户确认账号密码是否更新,以及是否存在针对非交互式登录的密码限制。

内容的提问来源于stack exchange,提问作者New Developer 2017

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:52:17