【问题标题】:Microsoft Graph API FindRooms ErrorAccessDeniedMicrosoft Graph API FindRooms ErrorAccessDenied
【发布时间】:2023-03-03 13:47:02
【问题描述】:

我们正在尝试通过 beta API 上的user_findrooms 获取组织中的房间列表。

我正在使用php-connect-sample,并在此处创建issue 后被定向到此处。

我们的应用程序已注册,并具有所需的权限。用户已登录并正确重定向。我可以成功获取/me端点

当我尝试像这样获取/me/findRooms 端点时:

$graph = new Graph();
$graph->setApiVersion('beta');
$graph->setAccessToken($_SESSION['access_token']);

$rooms = $graph->createRequest("get", "/me/findRooms")
                        ->setReturnType(Model\EmailAddress::class)
                        ->execute();

然后我得到以下错误:

客户端错误:GET https://graph.microsoft.com/beta/me/findRooms 导致 403 禁止响应:{“错误”:{“代码”: "ErrorAccessDenied", "message": "访问被拒绝。检查凭据 然后再试一次。",(截断...)

看来是权限错误。

我们的应用拥有以下 Graph 权限:

委派权限User.ReadBasic.AllUser.Read.All

应用程序权限Calendars.ReadWriteUser.Read.All

访问/me/findRooms需要哪些额外权限?

【问题讨论】:

  • 如果您只是在用户在场的情况下运行它,则无需指定应用权限。看起来您定义的委派权限足以查询 beta 端点上的房间,但还有一些其他的身份验证问题正在发生。有关其他上下文:您是否使用AAD V2 auth?另外,如果你decode your token,你在'scp'集合中看到了什么?
  • 感谢@DmitryPimenov 的回复 是的,我正在使用 Azure AD v2.0 端点获取 oauth 令牌当我解码令牌时,它在 scp 下包含以下内容:"Calendars.ReadWrite User.Read"

标签: microsoft-graph-api


【解决方案1】:

在您的身份验证流程中,您需要在您的范围内指定 User.Read.All 而不是 User.Read,因为此 API 需要读取您目录中的所有用户以查找会议室可用性。 Here is more information about how to request such scopes during the /authorize and /token requests.

【讨论】:

  • 谢谢。我在应用程序中拥有此权限,但没有将其与范围一起传递。
  • User.ReadBasic.All 如果您没有可用的 User.Read.All 也可以使用
猜你喜欢
  • 2018-08-19
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多