首页 > 解决方案 > User.ReadBasic.All 范围未授予,v2

问题描述

我正在尝试从 v2 Azure 目录请求以下 3 个 oauth 范围:user.read、user.readbasic.all、calendars.readwrite。

我的授权 GET 请求是

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?'
+ '&client_id=myclientid'
+ '&response_type=code'
+ `&redirect_uri=myredirecturl`
+ '&response_mode=query'
+ '&scope=user.read%20user.readbasic.all%20calendars.readwrite'
+ '&prompt=consent';

请注意,自上次授权以来,我已经排除了更改同意类型的可能性。

我成功获得了一个代码,并将其换成一个令牌:

axios.post(
'https://login.microsoftonline.com/common/oauth2/v2.0/token',
querystring.stringify(
  {
    client_id: my_client_id,
    client_secret: my_app_secret,
    grant_type: 'authorization_code',
    code,
    scope: 'user.readbasic.all user.read calendars.readwrite',
    redirect_uri: my_redirect_url
  },
  null,
  null,
  { encodeURIComponent: s => encodeURI(s) }
)

);

  1. user.readbasic.all在登录时没有看到任何同意消息
  2. 我没有收到User.ReadBasic.All关于我获得奖励的令牌范围的响应。
  3. 我正在接收 user.read 和 calendars.readwrite

更新 我相信我正在将问题缩小到更改范围或租户类型。虽然我有 prompt=consent 作为参数,但我没有在我的个人帐户上获得 user.readbasic.all 范围。当我将授权链接发送给组织租户中的其他人时,他们会获得完整的权限列表。为什么不同的用户会有两个不同的权限页面?两张截图: 组织租户 个人租户

标签: javascriptazure-active-directorymicrosoft-graph-api

解决方案


stringify()方法是将您的对象转换为application/json. 这是不正确的,应该是application/x-www-form-urlencoded

有关如何使用 Axios 执行此操作的详细信息,请参阅此 GitHub 问题

此外,个人帐户 (MSA) 无法“读取所有用户的基本资料”。作为“个人”帐户,只有一个用户关联。


推荐阅读