【问题标题】:Permissions for listing virtual machines with Graph API使用 Graph API 列出虚拟机的权限
【发布时间】:2021-03-17 19:04:44
【问题描述】:

我正在尝试使用请求:

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}?api-version=2020-12-01

来自 microsoft graph API:https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/get#code-try-0

我在 AD 订阅中创建了一个应用注册。当我尝试使用与应用注册关联的 oauth2 凭据时,我收到 401。我相信这是由于权限错误造成的。我尝试使用https://developer.microsoft.com/en-us/graph/graph-explorer,但我无法假设应用程序注册来模拟请求。关于为什么会发生这种情况或如何调试问题的任何见解都会非常有帮助

【问题讨论】:

  • 上述调用不是 Graph API,而是它的 Azure REST API。 HTTP 401 是权限相关的错误。在jwt.ms 中检查您的令牌,并查看登录用户是否具有必要的权限。如果没有提供必要的范围/权限/角色并重试。它会起作用的。
  • 使用jwt.ms 解析您的访问令牌并提供屏幕截图。
  • 嗨,这解决了你的问题吗?

标签: azure-active-directory microsoft-graph-api virtual-machine azure-rest-api


【解决方案1】:

与接受的答案不同,我必须设置访问此 url 的范围...

https://management.azure.com/subscriptions/{SubscriptionID}/providers/Microsoft.Compute/virtualMachines?api-version=2020-12-01

到:

https://management.azure.com/.default

【讨论】:

    【解决方案2】:

    你的错误不是缺少权限而是使用了错误的scope

    错误其实很简单,需要授予Azure Service Managementapi权限而不是MS graph权限,然后需要将scope设置为:https://management.azure.com/user_impersonation

    接下来,使用auth code flow 获取访问令牌。

    1. 在浏览器中请求授权码。
    https://login.microsoftonline.com/{tenant id}/oauth2/v2.0/authorize?
    client_id={client id}
    &response_type=code
    &redirect_uri={redirect_uri}
    &response_mode=query
    &scope=https://management.azure.com/user_impersonation
    &state=12345
    
    1. 兑换代币。

    调用api:

    请注意不要使用graph-explorer测试,因为你不是调用MS graph api,你可以使用postman。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2018-11-25
      • 2013-06-30
      • 2018-08-11
      • 1970-01-01
      相关资源
      最近更新 更多