【问题标题】:User.ReadBasic.All scope not granted, v2User.ReadBasic.All 范围未授予,v2
【发布时间】:2018-05-13 17:46:05
【问题描述】:

我正在尝试从 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 范围。当我将授权链接发送给组织租户中的其他人时,他们会获得完整的权限列表。为什么不同的用户会有两个不同的权限页面?两张截图:

【问题讨论】:

  • 您是否在该 AADv2 应用程序中添加了委派权限 user.readbasic.all
  • 是的,我在apps.dev.microsoft.com完成了这项工作
  • 尝试在范围内使用https%3A%2F%2Fgraph.microsoft.com%2Fcalendars.readwirte%20 https%3A%2F%2Fgraph.microsoft.com%2Fuser.read%20 https%3A%2F%2Fgraph.microsoft.com%2Fuser.readbasic.all

标签: javascript azure-active-directory microsoft-graph-api


【解决方案1】:

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

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

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

【讨论】:

  • 个人帐户无法读取“所有用户的基本资料”。是个人帐号,帐号里只有一个用户。
  • 马克关于个人账户的观点解决了我的问题。因为我被授予其他范围,所以我目前没有理由相信 stringify 是导致任何问题的原因
猜你喜欢
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多