2017-12-28 25 views
-1

Azure REST APIを使用してAzure Web Appスロットをスワップするローカルコンソールアプリケーションを作成しようとしています。私は資格証明書のいくつかの種類に配置する必要がありますが、私が発見したことは認証のためのAzure ADを使用してアプリケーションに適用されているようだ知っAzure REST APIリクエストの承認

public async Task Swap(string subscription, string resourceGroup, string site, string slot) 
{ 
    var client = new HttpClient(); 

    var url = 
     $"https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{site}/applySlotConfig?api-version=2016-08-01"; 

    var data = new {preserveVnet = true, targetSlot = slot}; 

    var message = new HttpRequestMessage 
    { 
     RequestUri = new Uri(url), 
     Method = HttpMethod.Post, 
     Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json") 
    }; 

    var response = await client.SendAsync(message); 

    Console.WriteLine(response.StatusCode); 
} 

:私は401(不正な)応答を取得するには、次のコードを使用しました。これは、匿名認証を使用して公開されているWebアプリケーションです。

+0

AzureのリソースマネージャAPIの認証を認証するためにこれを参照してください。 https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-rest-api。 –

答えて

0

一般に、Authトークンを使用して要求にAuthorizationヘッダーを添付する必要があります。入手方法はたくさんありますが、linkまたはthisを参照してください。

0

これは私が(提供されたリンクを使用して)それを行うために管理方法です:

private async Task<string> GetAccessToken(string tenantName, string clientId, string clientSecret) 
{ 
    var authString = "https://login.microsoftonline.com/" + tenantName; 
    var resourceUrl = "https://management.azure.com/"; 

    var authenticationContext = new AuthenticationContext(authString, false); 
    var clientCred = new ClientCredential(clientId, clientSecret); 
    var authenticationResult = await authenticationContext.AcquireTokenAsync(resourceUrl, clientCred); 
    var token = authenticationResult.AccessToken; 

    return token; 
} 

そして、私の以前の方法で:

public async Task Swap(string subscription, string resourceGroup, string site, string slot) 
{ 
    var client = new HttpClient(); 

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await GetAccessToken("XXX", "XXX", "XXX")); 

    var url = 
      $"https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resourceGroup}/providers/Microsoft.Web/sites/{site}/applySlotConfig?api-version=2016-08-01"; 

    var data = new {preserveVnet = true, targetSlot = slot}; 

    var message = new HttpRequestMessage 
    { 
     RequestUri = new Uri(url), 
     Method = HttpMethod.Post, 
     Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json") 
    }; 

    var response = await client.SendAsync(message); 

    Console.WriteLine(response.StatusCode); 
} 
関連する問題