Microsoft Graph API - 错误 403“权限不足,无法完成操作”

时间:2021-03-26 09:25:38

标签: r microsoft-graph-api

我正在尝试使用 AzureR 系列的 R 包通过图形 API 与 Outlook 交互。使用 Microsoft365R 我有以下代码:

outl <- get_business_outlook(
  tenant = tenant_id,
  app = client_id,
  password = client_secret
)

但这会导致 403 错误:

<块引用>

过程响应错误(res,match.arg(http_status_handler),简化): 禁止 (HTTP 403)。无法完成操作。信息: 权限不足,无法完成操作。

相关应用具有 API 权限 Mail.ReadWrite、Mail.ReadWriteShared、Mail.Send、Mail.Send.Shared、offline_access、openid、User.Read。

我也尝试过直接使用 AzureGraph 包,例如:

login <- create_graph_login(
  tenant = tenant_id,
  app = client_id,
  password = client_secret
)

这有效,我得到了一个令牌。然后我尝试使用 me <- login$get_user() 提取用户信息,但这会引发与上述相同的 403 错误。我怀疑我需要做一些事情来实际验证用户的身份,但我真的不知道是什么。

我对 Graph API 完全陌生,所以很可能我错过了一些明显的东西。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

Microsoft365R/AzureGraph 作者在这里。在您使用 get_business_onedrive()create_graph_login() 显示的代码中,您以应用身份进行身份验证,而不是以用户身份进行身份验证。这意味着不涉及用户帐户,因此您无法查看用户详细信息或发送电子邮件。

要以用户身份进行身份验证,请运行

# Microsoft365R
get_business_outlook("tenant_id", app="client_id")

# AzureGraph
create_graph_login("tenant_id", app="client_id")

即,没有 password 参数。如果 R 打开一个浏览器窗口让你登录 Azure(或显示它已成功登录),你应该知道它正在工作。

AzureAuth 包的最新版本有一个 vignette,它对各种身份验证方案进行了更多解释。 AzureAuth::get_azure_token 是 Microsoft365R 和 AzureGraph 用于获取 OAuth 令牌的底层函数,您可以从 get_business_outlookcreate_graph_login 传递小插图中提到的参数。