【发布时间】:2021-03-26 09:25:38
【问题描述】:
我正在尝试使用 R 包的 AzureR 系列通过 Graph API 与 Outlook 进行交互。使用 Microsoft365R 我有以下代码:
outl <- get_business_outlook(
tenant = tenant_id,
app = client_id,
password = client_secret
)
但这会导致 403 错误:
process_response(res, match.arg(http_status_handler), simple) 中的错误: 禁止 (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 完全陌生,所以我很可能错过了一些明显的东西。任何帮助表示赞赏!
【问题讨论】:
-
通过将访问令牌放入jwt.ms 来检查您的访问令牌,并查看您是否拥有具有上述所有权限的“scp”声明。
-
@ShivaKeshavVarma 您好,访问令牌中没有此类信息。
-
accessToken 中应该有权限,只有使用 'scp' 声明它才会了解您是否被授权,并且需要调用 Graph API。见docs.microsoft.com/en-us/graph/auth/auth-concepts
-
我显然可以访问该应用程序,因为我有秘密并得到了一个令牌,但我想我不明白我是如何授权自己的。创建登录时,我尝试指定范围,但随后出现“范围无效”的错误。
-
是的,这就是@ShivaKeshavVarma 上面所说的。如果您想访问受保护的资源(例如 Microsoft Graph),则需要获取具有所需权限/范围的令牌。只是为了隔离问题,您可以使用 Microsoft Graph Explorer,以同一用户身份登录,调用相同的 Graph API 调用,它将为您工作。您可以复制令牌,使用jwt.ms 验证相同的令牌(或者您可能想将其与您的令牌进行比较)...!!
标签: r microsoft-graph-api