public ExampleCapture(string secretsFile, string outputFolder, string outputFolderWorkarounds = null) { this.secrets = ExampleHelpers.ReadSecretsFile(secretsFile); this.outputFolder = outputFolder; this.outputFolderWorkarounds = outputFolderWorkarounds; this.client = ExampleHelpers.GetRealClient(secrets); this.rmClient = ExampleHelpers.GetRealRmClient(secrets); this.authClient = ExampleHelpers.GetAuthorizationClient(secrets); this.interceptor = new ExampleTracingInterceptor(client.SubscriptionId, client.ApiVersion); ServiceClientTracing.AddTracingInterceptor(interceptor); }
public static Rm.IResourceManagementClient GetRealRmClient(ExampleSecrets secrets) { Rm.IResourceManagementClient client = null; if (secrets.Environment == "test") { string ArmTenant = secrets.TenantId; string ArmServicePrincipalIdentity = secrets.ClientId; string SubId = secrets.SubId; string Thumb = secrets.ClientSecret; // Use service principal with cert to authenticate against Azure X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); X509Certificate2 cert = store.Certificates.Find(X509FindType.FindByThumbprint, Thumb, false)[0]; ClientAssertionCertificate cac = new ClientAssertionCertificate(ArmServicePrincipalIdentity, cert); var context = new AuthenticationContext("https://login.windows-ppe.net/" + ArmTenant); AuthenticationResult result = context.AcquireTokenAsync("https://management.core.windows.net/", cac).Result; ServiceClientCredentials creds = new TokenCredentials(result.AccessToken); client = new Rm.ResourceManagementClient(creds) { SubscriptionId = secrets.SubId }; client.BaseUri = new Uri("https://api-dogfood.resources.windows-int.net/"); } else if (secrets.Environment == "dogfood") { string ArmTenant = secrets.TenantId; string ArmServicePrincipalIdentity = secrets.ClientId; string SubId = secrets.SubId; // Use service principal with cert to authenticate against Azure string secret = secrets.ClientSecret; var cac = new ClientCredential(ArmServicePrincipalIdentity, secret); var context = new AuthenticationContext("https://login.windows-ppe.net/" + ArmTenant); AuthenticationResult result = context.AcquireTokenAsync("https://management.core.windows.net/", cac).Result; ServiceClientCredentials creds = new TokenCredentials(result.AccessToken); client = new Rm.ResourceManagementClient(creds) { SubscriptionId = secrets.SubId }; client.BaseUri = new Uri("https://api-dogfood.resources.windows-int.net/"); } else if (secrets.Environment == "prod") { // Use Service Principal to authenticate against Azure var context = new AuthenticationContext("https://login.windows.net/" + secrets.TenantId); ClientCredential cc = new ClientCredential(secrets.ClientId, secrets.ClientSecret); AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result; ServiceClientCredentials creds = new TokenCredentials(result.AccessToken); client = new Rm.ResourceManagementClient(creds) { SubscriptionId = secrets.SubId }; } else if (secrets.Environment == "nightly") { return(null); // Nightly environment is direct access to our RP, so no ARM } else { throw new ArgumentException("Secrets environment must be test, prod, or nightly, currently {0}", secrets.Environment); } return(client); }