2016-11-30 24 views
0

Azure Management APIを使用してメトリックデータを取得しようとしています。しかし、それは403の例外を投げています。なぜこのコードがうまくいかないのか誰にも分かりますか?私はこのコードが非常にシンプルで、MSDNの記事に基づいていますが、まだ403をスローすると感じています。どんな助けでも大歓迎です!Azure Management APIで403エラーが発生する

private string GetAccessToken() 
    { 
     var authenticationContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}", TenantID)); 
     var credential = new ClientCredential(clientId: AppID, clientSecret: SecretKey); 
     var result = authenticationContext.AcquireToken(resource: "https://management.core.windows.net/", 
      clientCredential: credential); 

     if (result == null) 
     { 
      throw new InvalidOperationException("Failed to obtain the JWT token"); 
     } 

     string token = result.AccessToken; 
     return token; 
    } 

...

 using (var client = new HttpClient()) 
     { 
      string header = GetAccessToken(); 

      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer", header 

    ); 

      if (! resourceID.StartsWith("/")) 
      { 
       resourceID = "/" + resourceID; 
      } 

      string url = "https://management.azure.com" + resourceID + 
       "/providers/microsoft.insights/metricdefinitions?api-version=2016-03-01"; 
      var response = client.GetStringAsync(url).Result; 

      return response; 
     } 
+0

Iは '新しいAuthenticationHeaderValueの「ベアラ」の後にスペース(「ベアラ」、ヘッダ)'すなわち、それは「ベアラ」でなければならない存在であるべきと考えています。それが問題を解決するか試してみてください。 –

+0

このスレッドに関する最新情報はありますか? –

答えて

0

サービスプリンシパルを作成し、サービスプリンシパルに対応する役割を割り当てようとしていてください。 PowerShellを使用して簡単に作成できます。アクセストークンを取得する方法の詳細については、articleを参照してください。

New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId 

New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $app.ApplicationId.Guid 

メトリック情報を取得しようとすると、リソースにメトリック定義情報がないため、404エラーが発生します。私は別のAPIを試している間/providers/microsoft.insights/alertrules?api-version=2016-03-01。それは私のために正しく動作します。

enter image description here

関連する問題