2016-12-28 7 views
0

Мне нужен список лазурного хранилища из моего идентификатора подписки и токена аутентификации. Я делаю код согласно ссылке -`Как получить хранение списка Azure C#?

https://msdn.microsoft.com/en-us/library/azure/ee460787.aspx?f=255&MSPPError=-2147217396

Но я не в состоянии получить эти данные и в ответ я только получаю код 401 Unauthorized access

Я попытался код C# в соответствии с ниже -

Получить авторизации токена -

private static string GetAuthorizationToken() 
     { 
      ClientCredential cc = new ClientCredential(ClientId, ServicePrincipalPassword); 
      var context = new AuthenticationContext("https://login.windows.net/" + AzureTenantId); 
      var result = context.AcquireTokenAsync("https://management.azure.com/", cc); 
      if (result == null) 
      { 
       throw new InvalidOperationException("Failed to obtain the JWT token"); 
      } 

      return result.Result.AccessToken; 
     } 

А потом

AuthToken = GetAuthorizationToken(); 
       TokenCredentials = new TokenCredentials(AuthToken); 

       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://management.core.windows.net/<My Subscription ID>/services/storageservices"); 
       request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + AuthToken); 
       request.ContentType = "application/json"; 
       request.Method = "GET"; 
       //request.Headers["Authorization"] = "Bearer " + AuthToken; // Also tried this 
       request.Headers["x-ms-version"] = "2016-05-31";// 

       //https://management.core.windows.net/<subscription-id>/services/storageservices 
       //header - "x-ms-version" 

       HttpWebResponse response = null; 
       try 
       { 
        response = (HttpWebResponse)request.GetResponse();      
       } 
       catch (WebException ex) 
       { 
        //ex.Message; 
       } 

Просьба предложить любое решение, чтобы получить список учетных записей для хранения от подписки ID и маркер аутентификации. и если у вас есть лучшее решение, другое, то это, чтобы получить список хранения, а затем, пожалуйста, предложите.

+0

Пожалуйста, попробуйте изменить следующую строку кода: var result = context.AcquireTokenAsync ("https://management.azure.com/", cc); 'to' var result = context.AcquireTokenAsync ("https: // management.core.windows.net/ ", cc);'. –

+0

@GauravMantri Я привязался по вашему предложению, но он дает ошибку в этой аутентификации. Исключение типа «System.AggregateException» произошло в mscorlib.dll, но не было обработано в коде пользователя – Shirish

ответ

0

Я использую ниже функции для создания подобных запросов:

private static async Task<HttpWebRequest> createHttpRequestWithToken(Uri uri) 
{ 
    HttpWebRequest newRequest = (HttpWebRequest)HttpWebRequest.Create(uri); 
    string clientId = ConfigurationManager.AppSettings["ClientId"]); 
    string clientSecret = ConfigurationManager.AppSettings["ClientSecret"]); 
    ClientCredential creds = new ClientCredential(clientId, clientSecret); 
    AuthenticationContext authContext = new AuthenticationContext(string.Format("https://login.microsoftonline.com/{0}/", ConfigurationManager.AppSettings["OrganizationId"])); 
    AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://management.core.windows.net/", creds); 
    newRequest.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + authResult.AccessToken);  
    return newRequest; 
} 

И создать запрос, как это:

HttpWebRequest request = createHttpRequestWithToken(uri).Result; 

Кроме того, Windows Azure Service Management API должно быть предоставлено разрешение на доступ к ресурсам , Это можно сделать на вкладке «Конфигурация» в разделе «Принцип обслуживания AD».

enter image description here

+0

Я застрял в этой строке - AuthenticationResult authResult = ожидание authContext.AcquireTokenAsync ("https://management.core.windows.net/", creds); У тебя есть идея, почему она застряла на этой линии? – Shirish

+0

застряли, как у вас возникает какая-то ошибка? –

+0

Ошибка при метании ошибки, она просто продолжает обрабатывать запрос и остается на этой обработке. – Shirish

0

Для list all the storage accounts available under the subscription, вы можете попробовать использовать:

GET /subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts?api-version=2016-01-01

следующий пример кода хорошо работает на моей стороне, пожалуйста, обратитесь к нему.

string tenantId = "xxxx"; 
string clientId = "xxxx"; 
string clientSecret = "xxxx"; 
string subscriptionid = "xxxx"; 

string authContextURL = "https://login.windows.net/" + tenantId; 
var authenticationContext = new AuthenticationContext(authContextURL); 
var credential = new ClientCredential(clientId, clientSecret); 
var result = await authenticationContext.AcquireTokenAsync(resource: "https://management.azure.com/", clientCredential: credential); 

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

string token = result.AccessToken; 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://management.azure.com/subscriptions/{0}/providers/Microsoft.Storage/storageAccounts?api-version=2016-01-01", subscriptionid)); 

request.Method = "GET"; 
request.Headers["Authorization"] = "Bearer " + token; 


HttpWebResponse response = null; 
try 
{ 
    response = (HttpWebResponse)request.GetResponse(); 
} 
catch (WebException ex) 
{ 
    //ex.Message; 
} 

ответ в скрипаче выглядит так.

enter image description here

Кроме того, убедитесь, что если вы assign the application to a role, если не назначить приложение к роли, появится 403 ошибка.

 Смежные вопросы

  • Нет связанных вопросов^_^