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

使用PnP ACS应用仅上下文的CSOM代码突发Token请求失败(401未授权)问题求助

解决ACS App Only认证401 Unauthorized异常的排查建议

这种运行一年后突然出现的令牌请求失败(401未授权),大概率是权限或密钥相关的配置变动导致的,给你几个逐步排查的方向:


1. 优先检查客户端密钥(Client Secret)有效期

ACS应用的客户端密钥默认有效期通常为1年,刚好和你的代码运行周期匹配:

  • 登录Azure AD租户管理后台,找到你的应用注册
  • 进入「证书和密码」页面,查看已创建的客户端密钥状态
  • 如果密钥已过期,点击「新建客户端密码」生成一个新的密钥,替换代码中的clientSecret参数

2. 确认应用权限是否被修改或撤销

有没有管理员最近调整过应用的权限配置?

  • 进入应用注册的「API权限」页面,检查SharePoint相关的权限(比如Sites.FullControl.All、Sites.ReadWrite.All等)是否处于「已授予」状态
  • 确认权限的作用范围(租户级/站点级)是否符合你的代码操作需求,如果是站点级权限,检查目标站点是否还在权限范围内

3. 验证租户ACS配置是否正常

部分租户可能会更新ACS(Access Control Service)的安全设置:

  • 确认租户是否禁用了ACS应用权限认证(可通过PowerShell命令Get-SPOTenant查看DisableCustomAppAuthentication属性,确保其值为False)
  • 检查应用是否被添加到目标站点的「网站集管理员」列表中,避免站点级权限被移除

4. 排查网络与端点访问问题

突然的网络环境变更也可能导致令牌请求失败:

  • 测试服务器能否正常访问ACS令牌端点:https://accounts.accesscontrol.windows.net
  • 检查服务器防火墙、代理是否拦截了对该端点的HTTPS请求
  • 确认RisksiteUrl是否正确,目标站点是否正常运行(未被删除、迁移或重命名)

5. 临时测试替换认证方式

如果以上排查都没问题,可以临时用PnP的证书认证方式测试,确认是否是ACS本身的问题:

// 示例证书认证代码
using (ClientContext context = new PnP.Framework.AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(
    RisksiteUrl, clientId, tenantId, @"C:\path\to\certificate.pfx", "certificatePassword"))
{
    // 执行测试操作
    context.Load(context.Web);
    context.ExecuteQuery();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:49:08