【发布时间】: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}”的凭据。对吗?