使用POST方法调用MS Graph创建SharePoint文件夹时出现401错误
问题核心原因定位
你遇到的401错误核心是报错信息里的Access token is empty,即请求携带的访问令牌为空,按以下步骤排查即可解决:
排查&解决步骤
- 校验令牌获取逻辑的异常处理
你当前的getToken函数在捕获错误时直接返回Error对象,调用侧没有做返回值校验:如果令牌获取环节出错,你拿到的authRes是Error实例,不存在accessToken属性,传入请求就会出现空令牌问题。
修改调用侧代码,先校验令牌是否正常返回:
const authRes = await getToken() // 新增校验逻辑 if (!authRes?.accessToken) { console.error("令牌获取失败:", authRes) return }
同时打开getToken里注释掉的accessToken打印逻辑,确认能正常获取到非空的令牌字符串。
- 校验Scope配置正确性
你当前的Scope是拼接生成的,需要确认环境变量GRAPH_ENDPOINT的末尾是否带斜杠:
- 正确的Scope应为
https://graph.microsoft.com/.default - 如果
GRAPH_ENDPOINT末尾没有斜杠,拼接出来的错误Scope为https://graph.microsoft.com.default,会导致令牌获取失败
直接打印process.env.GRAPH_ENDPOINT + ".default"确认格式是否正确即可。
- 校验Azure AD应用权限配置
- 首先修正权限名拼写错误:你提到的
Sites.ReadWright.All拼写错误,正确权限名为Sites.ReadWrite.All,如果配置时写错了权限名会导致权限无效 - 确认配置的是应用权限而非委托权限:你使用的客户端凭证流只支持应用权限,选委托权限不会生效
- 确认已经点击「授予管理员同意」按钮:仅添加权限未给租户授权的话,权限不会生效
- 校验请求头格式正确性
确认你的makeRequest函数中,令牌是按Authorization: Bearer ${accessToken}的格式放入请求头的:如果遗漏了Bearer前缀,或者字段名拼写错误,都会被Graph API识别为空/无效令牌。
内容的提问来源于stack exchange,提问作者Quint
相关产品推荐
相关产品推荐

