Android端通过Graph API获取SharePoint全部文档列表的实现问题
1. 授权权限配置校验
首先确认你在Azure AD门户为应用配置了以下Delegated权限之一,且已完成用户授权同意:
Sites.Read.All:可读取所有站点内容Sites.ReadWrite.All:可读写所有站点内容- 若仅需访问指定站点,可配置
Sites.Selected并单独分配对应站点的访问权限
注意:移动端场景仅支持Delegated权限,不可使用Application类型权限
2. 标准调用流程
你已经完成MSAL登录获取访问令牌,后续按以下步骤调用即可:
- 从你已获取的站点数据中提取站点
id字段,格式通常为{租户ID},{站点ID},{Web ID} - 调用接口获取文档列表:
- 若只需获取默认文档库的根目录文件,请求路径为
GET https://graph.microsoft.com/v1.0/sites/{替换为你的站点ID}/drive/root/children - 若需获取所有文档库的内容,先调用
GET https://graph.microsoft.com/v1.0/sites/{替换为你的站点ID}/drives获取站点下全部文档库,再逐个遍历每个文档库的/root/children路径
- 若只需获取默认文档库的根目录文件,请求路径为
- 若需要递归获取子目录下的所有文件,对返回结果中
folder属性不为空的目录条目,继续调用GET https://graph.microsoft.com/v1.0/sites/{替换为你的站点ID}/drives/{替换为文档库ID}/items/{替换为目录条目ID}/children即可
3. Kotlin代码实现示例
基于你已接入的MSAL认证逻辑,使用OkHttp发起请求的参考代码如下:
// 此处accessToken为你通过MSAL登录获取的有效访问令牌 val targetSiteId = "你提取到的目标站点ID" val graphRequest = Request.Builder() .url("https://graph.microsoft.com/v1.0/sites/$targetSiteId/drive/root/children") .addHeader("Authorization", "Bearer $accessToken") .build() OkHttpClient().newCall(graphRequest).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { // 处理网络异常等请求失败逻辑 } override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { val respContent = response.body?.string() // 解析返回JSON提取文件列表即可 } else { // 打印错误码和错误内容排查问题:403为权限不足,404为站点/路径不存在 Log.e("GraphAPI_ERROR", "错误码:${response.code},错误信息:${response.body?.string()}") } } })
4. 常见问题排查
- 若返回403错误:优先检查权限配置是否正确,是否完成用户授权,可解析访问令牌查看
scp字段确认权限是否已生效 - 若无返回值:检查是否正确添加Authorization请求头,接口路径是否拼写错误,站点ID是否填写正确
- 不建议直接调用SharePoint原生REST API,移动端场景优先使用Graph API封装的接口,可避免权限适配问题
内容的提问来源于stack exchange,提问作者Annie
相关产品推荐
相关产品推荐

