SharePoint On-Premise 2016获取Access Token时出现401未授权错误
问题概述
已按官方文档创建应用并获取Client ID、Client Secret,但通过授权URL无法获取Code,后续获取Access Token时返回401未授权错误:
error=server_error&error_description=The%20remote%20server%20returned%20an%20error%3A%20%28401%29%20Unauthorized%2E
使用管理员账号,目标是通过API上传文件到SharePoint站点。
排查与解决方案
1. 确认应用权限配置
- 创建应用时,需确保已为目标站点分配对应权限级别(如Web.Manage),且完成权限授予操作:在应用注册页面的"权限"部分,添加目标站点并选择权限后,点击"授予权限"按钮完成授权。
- 检查权限范围是否匹配,避免使用On-Premise不支持的scope值。
2. 校验授权URL参数
- client_id:确认是否为应用注册页面生成的正确ID,无复制错误。
- redirect_uri:必须与应用注册时填写的回调地址完全一致,包括协议、域名、端口、路径,任何差异都会导致授权失败。
- scope:确保使用SharePoint On-Premise支持的权限范围,
Web.Manage是有效范围,但需确认该权限已被授予给应用。
3. 检查授权流程完整性
- 访问授权URL时,需使用管理员账号完成登录,确认是否出现应用授权同意页面:
- 若未出现同意页面,大概率是redirect_uri不匹配或应用权限未正确配置。
- 若登录后未跳转至redirect_uri并携带
code参数,检查浏览器是否拦截了跳转,或服务器是否存在反向代理导致跳转异常。
4. 验证ACS端点访问性
- SharePoint On-Premise 2016依赖Azure ACS服务,需确认SharePoint服务器能正常访问
https://accounts.accesscontrol.windows.net/,排查防火墙、代理是否拦截了该地址的请求。
5. 检查Token请求参数正确性
获取Code后,换Token的POST请求需包含以下参数(示例):
POST https://accounts.accesscontrol.windows.net/{tenant-id}/tokens/OAuth/2.0 Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code={your-code} &client_id={your-client-id} &client_secret={your-client-secret} &redirect_uri={your-redirect-uri} &scope={your-scope}
- 确认
client_secret无输入错误,特殊字符需做URL编码。 - 确认ACS端点中的
{tenant-id}为SharePoint服务器对应的ACS租户ID(可通过SharePoint管理中心查看)。
6. 检查SharePoint OAuth服务状态
在SharePoint服务器上,确认以下服务是否正常运行:
- SharePoint OAuth Authentication Service
- SharePoint Subscription Settings Service
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

