SamplesV1/ADFSecurePublish/AdfKeyVaultDeployment/AzureAccessUtilities.cs (75 lines of code) (raw):

using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Microsoft.IdentityModel.Clients.ActiveDirectory; using Microsoft.ADF.Deployment.AdfKeyVaultDeployment.Models; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Microsoft.ADF.Deployment.AdfKeyVaultDeployment { public class AzureAccessUtilities { public static async Task<List<DataFactoryInfo>> GetDataFactories(SettingsContext settingsContext) { var dataFactories = new List<DataFactoryInfo>(); string uri = $"https://management.azure.com/subscriptions/{settingsContext.SubscriptionId}/resources?$filter=resourceType%20eq%20'Microsoft.DataFactory%2Fdatafactories'&api-version=2014-04-01-preview"; HttpResponseMessage response = await ExecuteArmRequest(settingsContext, HttpMethod.Get, uri); string responseText = response.Content.ReadAsStringAsync().Result; var jObject = JObject.Parse(responseText); var itemArray = jObject["value"] as JArray; if (itemArray != null) { foreach (JToken jToken in itemArray) { JObject item = jToken as JObject; string id = item?["id"].ToObject<string>(); string resourceGroup = string.Empty; if (!string.IsNullOrEmpty(id)) { resourceGroup = id.Split('/')[4]; } DataFactoryInfo dfi = new DataFactoryInfo { SubscriptionId = settingsContext.SubscriptionId, Location = item?["location"].ToObject<string>(), Name = item?["name"].ToObject<string>(), ResourceGroup = resourceGroup }; dataFactories.Add(dfi); } } return dataFactories; } public static async Task<HttpResponseMessage> ExecuteArmRequest(SettingsContext settingsContext, HttpMethod httpMethod, string uri, object requestBody = null) { Uri baseUrl = new Uri(uri); string authorizationToken = GetAuthorizationHeaderNoPopup(settingsContext); HttpClient client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(httpMethod, baseUrl); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authorizationToken); if (requestBody != null) { request.Content = new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json"); } HttpResponseMessage response = await client.SendAsync(request); return response; } /// <summary>TokenCloudCredentials /// Gets the authorization header without popup. /// </summary> public static string GetAuthorizationHeaderNoPopup(SettingsContext settingsContext) { var authority = new Uri(new Uri("https://login.windows.net"), settingsContext.ActiveDirectoryTenantId); var context = new AuthenticationContext(authority.AbsoluteUri); var credential = new ClientCredential(settingsContext.AdfClientId, settingsContext.AdfClientSecret); AuthenticationResult result = context.AcquireTokenAsync(settingsContext.WindowsManagementUri, credential).Result; if (result != null) { return result.AccessToken; } throw new InvalidOperationException("Failed to acquire token"); } } }