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

shinyapps.io部署的Shiny应用通过Azure AD认证访问SharePoint站点问题

解决方案

1. Azure Active Directory配置校验

  • 确认你在Azure AD注册的应用已添加对应权限:若使用Microsoft Graph访问SharePoint,需添加委托权限下的Sites.Read.All(站点读权限)或Files.Read.All(文件读权限),权限配置完成后必须由租户管理员完成同意授权。
  • 确认应用的重定向URI已正确配置为你部署在shinyapps.io的应用访问地址,平台类型选择「Web」,且已勾选「ID令牌」「访问令牌」的发放选项。
  • 确认你的应用注册所属租户与企业SharePoint所属租户为同一租户。

2. SharePoint站点配置校验

  • 若使用委托权限模式(即当前登录Shiny应用的用户身份访问SharePoint),确认对应登录账号已被添加到目标SharePoint站点的访问列表中,拥有目标文件/文档库的读取权限。
  • 若使用应用权限模式(即应用本身身份访问SharePoint),需额外在SharePoint站点中为应用的服务主体分配对应读取权限。

3. Shiny应用R代码实现

你已经通过AzureAuth获取到了Graph资源的访问令牌,可直接通过以下两种方式访问SharePoint数据:

方式一:使用Microsoft365R包(推荐)

直接将获取到的令牌传入对应函数即可:

library(Microsoft365R)
library(AzureAuth)

# 你之前通过AzureAuth流程获取到的令牌对象,假设变量名为graph_token
# 替换为你的SharePoint站点实际URL
target_site <- get_sharepoint_site(
  site_url = "https://你的租户名.sharepoint.com/sites/你的站点名",
  token = graph_token
)

# 获取目标文档库
doc_lib <- target_site$get_drive("文档库名称")

# 读取目标csv数据文件,可根据文件类型调整读取逻辑
data_file <- doc_lib$get_item("文件夹路径/目标数据文件.csv")
temp_path <- tempfile(fileext = ".csv")
data_file$download(temp_path, overwrite = TRUE)
target_data <- read.csv(temp_path)

方式二:直接调用Graph API

如果不想依赖第三方包,可直接用httr包调用Graph接口读取数据:

library(httr)
library(jsonlite)

# 替换为你的站点ID、文档库ID、文件路径
graph_url <- "https://graph.microsoft.com/v1.0/sites/你的站点ID/drives/你的文档库ID/root:/目标文件路径.csv:/content"
resp <- GET(
  graph_url,
  add_headers(Authorization = paste0("Bearer ", graph_token$credentials$access_token))
)
target_data <- read.csv(text = content(resp, "text"))

常见问题排查

  • 若调用接口返回401无权限,可先解码你的访问令牌,确认scp字段中包含你配置的SharePoint/Graph对应权限,若没有则需要重新走授权流程获取令牌。
  • 若返回403禁止访问,确认当前登录账号/应用服务主体有目标站点的对应访问权限。
  • 如果你后续需要调用SharePoint原生REST API,需要将AzureAuth中的resource参数修改为"https://你的租户名.sharepoint.com",同时在Azure AD应用中添加SharePoint对应的权限即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:48:02