我正在尝试使用 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 完全陌生,所以很可能我错过了一些明显的东西。任何帮助表示赞赏!
答案 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_outlook
和 create_graph_login
传递小插图中提到的参数。