【问题标题】:Microsoft Graph API Get Group EventsMicrosoft Graph API 获取组事件
【发布时间】:2023-04-06 05:14:01
【问题描述】:

我正在尝试使用 MS Graph API(我是新手)编写一个 Powershell 脚本,将事件从 private 组日历复制到 public 组日历。

到目前为止,我已经设法通过这个调用获得了私人组:

$api = "https://graph.microsoft.com/v1.0/groups"
$groups = $null
try { $groups = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token.access_token)" } -Uri $api -Method "GET" -ContentType "application/json" }
catch { Write-host -Foreground Red $_}
$calendar_group = $groups.value | ? -Property mailNickname -eq $pvt_group

但是,当我尝试向前移动并获取该组的事件时,我会因 403 错误而被退回。

我正在尝试的电话是:

$api = "https://graph.microsoft.com/v1.0/groups/$group_ID/calendar/events"
Write-Host $api -Fore Green
$events = $null
try { $events = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token.access_token)" } -Uri $api -Method "GET" -ContentType "application/json" }
    catch { Write-host -Foreground Red $_}

或者:

$api = "https://graph.microsoft.com/v1.0/groups/$group_ID/events"
Write-Host $api -Fore Green
$events = $null
try { $events = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token.access_token)" } -Uri $api -Method "GET" -ContentType "application/json" }
catch { Write-host -Foreground Red $_}

两者都因相同的错误而失败。 注意:$group_ID 变量在第一次调用时被正确赋值。

我已使用以下权限在 Azure 上注册了该应用:

  1. Calendars.Read 委托
  2. Calendars.Read.Shared 委托
  3. Calendars.ReadWrite 委托
  4. Calendars.ReadWrite.Shared 委托
  5. Directory.AccessAsUser.All 委托
  6. Directory.Read.All 委派
  7. Directory.Read.All 应用程序
  8. Directory.ReadWrite.All 委托
  9. Directory.ReadWrite.All 应用程序
  10. Group.Read.All 委派
  11. Group.Read.All 应用程序
  12. Group.ReadWrite.All 委托
  13. Group.ReadWrite.All 应用程序
  14. GroupMember.Read.All 委托
  15. GroupMember.Read.All 应用程序
  16. User.Read 委托

有人知道我做错了什么吗? 非常感谢。

【问题讨论】:

  • 您能否将$($token.access_token) 的值复制粘贴到jwt.ms 并检查scp 元素中的值。它是否包含 Group.Read.All?
  • 我发现对这些情况非常有帮助的是Graph Explorer。只是提一下,以防您还没有检查过。
  • 嗨@Melissa 感谢您的意见。这对我来说真的很新鲜。回复:jwt.ms:没有 scp 元素。但是,在声明的角色部分中,这些都列出了:Group.Read.All,Directory.ReadWrite.All,Group.ReadWrite.All,Directory.Read.All,GroupMember.Read.All re: Graph Explorer: I run the在那里查询,我得到相同的错误:“消息”:“访问被拒绝。检查凭据并重试。”,以及建议:禁止 - 403 - 73ms。您需要同意修改权限(预览)选项卡上的权限,我认为我已经这样做了。
  • 我可以重现您的问题。我今天会试着调查一下。顺便问一下,你不使用 Az powershell 模块有什么原因吗?
  • @Melissa 感谢您的时间和精力。没有具体原因,我想我只是开始尝试这种方式。

标签: azure powershell microsoft-graph-api


【解决方案1】:

您使用的访问令牌是应用程序访问令牌(权限在Roles 部分下定义)。如果使用用户访问令牌,您将在 de scp 部分看到权限。

在 Microsoft 文档 (here) 中指出,不幸的是,应用程序访问令牌不支持调用 /calendar/events。

如果您将您的帐户分配给Groups administrator 角色,您将被隐式分配Group.Read.All 权限。然后使用您帐户中的访问令牌调用端点没有任何问题(因为您已经在应用注册中授予了委托所需的权限)。

【讨论】:

  • 谢谢。我的帐户是该租户的 GA。我向其中添加了组管理员角色(不确定是否需要),然后我从应用程序中删除了应用程序权限,但它仍然无法正常工作,所以我猜现在错误在于我如何获取令牌。正如您所指出的,我正在获得一个应用程序访问令牌,而我需要一个用户。
  • 要获取用户令牌,您应该查看here。在那里,您还可以找到包含请求令牌的所有不同场景的邮递员集合的链接。我确实建议使用 az cli (az login) 或 az powershell 模块 (Login-AzAccount),因为它们可以让生活更轻松:)
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 2018-06-24
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
相关资源
最近更新 更多