【问题标题】:ms Graph api, calendarView 403-accessdenied errorms Graph api,calendarView 403-accessdenied 错误
【发布时间】:2021-07-08 18:06:05
【问题描述】:

首先,我使用的是 Spring、Jetty、Retrofit。

当我在本地使用 calendarView 时,它们成功返回成功的值。

但是,当其他人连接到我的本地服务器并调用此 api 时,它总是返回 403-AccessDenied 错误。 (另外,当他们调用另一个 ms api 时,他们会返回成功的值。)

我想我已经在 Graph api 中设置了所有推荐的权限。 但这可能是我的错觉。

为了让别人从我的本地服务器调用api,我该怎么办?

或者我在这件事上遗漏了什么?

这些是我的权限。

"openid",
"offline_access",
"profile",
"User.ReadWrite",
"Mail.ReadWrite",
"Calendars.ReadWrite",
"User.ReadBasic.All",
"BookingsAppointment.ReadWrite.All"

这是我的天蓝色信息。

我正在使用这个日历视图 api

https://docs.microsoft.com/en-us/graph/api/calendar-list-calendarview?view=graph-rest-1.0&tabs=http

并在我的代码中使用此 URL(在这种情况下,我使用的是批处理请求)

GET | "/users/"+getAddress()+"/calendarView?startDateTime="+getStartTime()+"&endDateTime="+getEndTime()

【问题讨论】:

  • 对于“其他”,这是否意味着与您在同一 Azure AD 租户中的其他用户? “其他人连接到我的本地服务器”是什么意思?您正在尝试访问 O365 数据。调用 API 的位置无关紧要。
  • 对于我的解释不充分,我深表歉意。我正在使用 Jetty 在本地进行测试。 (ig。IP-address:8443/projectName)我正在通过让人们在同一个 wifi 上连接到我的本地(使用 ipv4)来测试 api 调用。此外,他们使用我为 Azure AD 注册的同一个应用程序。
  • 他们是否需要使用他们的凭据登录您的应用程序?他们试图访问谁的 calendarView?
  • 是的,他们正在我的应用程序中使用他们的凭据。当他们登录时,我的应用程序将获得对其帐户的访问权限。对于 CalendarView,我使用它来查找每个楼层的可用性。所以,我如下调用api。 1号。 /beta/me/findRoomLists No2. /beta/me/findRooms(RoomList='{RoomList}') -> (基于 No.1) No3. /v1.0/users/{Room}/calendar/calendarView -> (基于No.2)我通常从No.1到No.3获取数据。但是,使用同一网络的人正常接收数据,No.1和No.2但是No.3出现问题。
  • 因此,当您通常从 No.1 获取 No.3 数据时,您使用的是用户“{Room}”的凭据。对吗?

标签: azure-ad-graph-api


【解决方案1】:

根据您的描述,其他用户正在尝试访问用户“{Room}”的 calendarView。

在这种情况下,您还需要 2 个配置。

  1. 用户“{Room}”将邮箱权限“完全访问”授予其他用户 在 Office 365 中。请参阅 Use the EAC to assign permissions to individual mailboxes。 (你应该能找到下面的房间 资源。并且该过程可能需要长达数小时才能使更改通过系统传播并生效。)
  2. 再添加一个委派权限:Calendars.ReadWrite.Shared 到 在 Azure AD 中注册的应用。

【讨论】:

  • 非常感谢。我设置了这个,它工作得很好! :) 但是,人们正在从他们各自的帐户中请求 api,为什么这不起作用仍然是一个问题。有什么我弄错了吗?
  • 此 API 具有 Delegated 权限(需要用户凭据)应仅用于访问已登录用户的数据。也就是说,他们只能访问自己的数据。如果您使用应用程序权限(没有用户凭据),则使用您的应用程序的每个人都可以访问数据。所以我们可以绕过它给其他用户完全访问权限并分配 Calendars.ReadWrite.Shared 委托权限,这意味着委托用户可以打开用户“{Room}”的邮箱并执行除发送消息之外的任何操作(包括访问它的数据)。
  • 我明白了,谢谢你的具体解释!
猜你喜欢
  • 1970-01-01
  • 2022-08-26
  • 1970-01-01
  • 2013-03-15
  • 2018-06-24
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多