0

当我在 azure docs post man 上尝试 azure rest api url 时,我能够获得一个包含所有资源组的 json。 https://docs.microsoft.com/en-us/rest/api/resources/resourcegroups/list#code-try-0链接

在此处输入图像描述

但我正在从 ASP.NET MVC Core C# 应用程序中尝试它,我收到一个空数组。

    public async Task<ResourceGroupModel> GetResourceGroupStatus()
    {
        ResourceGroupModel resourceGroupModel = null;
        try         
        { 
            string requestUrlString = iconfiguration.GetValue<string>("HealthSettings:AzureGetResourcesBySubscriptionURL");
            string azureSubscription = iconfiguration.GetValue<string>("HealthSettings:AzureSubscription");
            string clientId = iconfiguration.GetValue<string>("HealthSettings:ClientId");
            string tenantId = iconfiguration.GetValue<string>("HealthSettings:TenantId");
            string clientSecret = iconfiguration.GetValue<string>("HealthSettings:ClientSecret");
            Uri requestUrl = new Uri(requestUrlString.Replace("{subscriptionId}", azureSubscription));

            string token = await GetAccessToken(tenantId, clientId, clientSecret);

            _httpClient.DefaultRequestHeaders.Remove("Authorization");
            _httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

            var response = _httpClient.GetAsync(requestUrl);

            if (response.Result.IsSuccessStatusCode)
            {
                var data = response.Result.Content.ReadAsStringAsync();
                resourceGroupModel = ResourceGroupModel.FromJson(data.Result.ToString());
            }
        }
        catch (Exception ex)
        {
        }
        return resourceGroupModel;
    }

你能帮我摆脱 Azure REST API 的奇怪行为吗?提前谢谢了。:)

4

3 回答 3

0

您的服务主体无权访问资源组。

  1. 登录 Azure 门户并选择资源组
  2. 从 Blade 中选择访问控制 (IAM)
  3. 在检查访问选项卡上,添加角色分配
  4. 为您的服务主体分配一个角色(所有者/贡献者/读者)
  5. 分配访问权限:Azure AD 用户、组或服务主体
  6. 输入您的服务主体名称,搜索并选择它,然后保存。
  7. 等待几分钟,然后再次尝试调用您的 API。
于 2019-06-11T19:40:34.383 回答
0

删除现有的客户密码并为服务原则创建新的密码解决了这个问题。

于 2019-06-15T20:00:31.550 回答
0

正如 Ciubotariu 所说,您的服务主体无权访问资源组。但是,如果您只将服务主体添加到资源组,则只能获取指定的资源组。因此,将您的服务主体添加到您的 Subscription。以下是步骤:

1.转到您的订阅,单击访问控制>添加(添加角色分配) 在此处输入图像描述

2.添加您的服务主体并为其分配角色,例如贡献者。 在此处输入图像描述

3.然后您将获得订阅的所有资源组。 在此处输入图像描述

更新:

4.这是我使用的完整代码:

var appId = "xxxxxxxxxxxxxxx";
var secretKey = "xxxxxxxxxxxxxxxxxxxxx";
var tenantId = "xxxxxxxxxxxxxxxxx";
var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
ClientCredential clientCredential = new ClientCredential(appId, secretKey);
var tokenResponse = context.AcquireTokenAsync("https://management.azure.com/", clientCredential).Result;
var accessToken = tokenResponse.AccessToken;
using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    var baseUrl = new Uri($"https://management.azure.com/");
    var requestURl = baseUrl +
                    @"subscriptions/xxxxxxxxxxxxxxxx/resourcegroups?api-version=2019-05-01";
    var response = client.GetAsync(requestURl).Result.Content.ReadAsStringAsync().Result;
}
于 2019-06-12T07:10:37.153 回答