// Default to AAD (developer workstation scenario) public async Task ConnectAsync() { string tenant = "microsoft.com"; string aadAuthority = $"https://login.windows.net/{tenant}"; // Fixed static resource Guid for Azure Devops string aadResource = "499b84ac-1321-427f-aa17-267ca6975798"; // MSA client ID if you don't have an application ID regsitered with Azure string aadClientId = "872cd9fa-d31f-45e0-9eab-6e460a02d1f1"; // Login now AuthenticationContext authCtx = new AuthenticationContext(aadAuthority); string aadUser = $"{Environment.UserName}@{tenant}"; UserCredential userCredential = new UserCredential(aadUser); Console.WriteLine($"Logging in as {userCredential.UserName}"); this.AuthenticationResult = await authCtx.AcquireTokenAsync(aadResource, aadClientId, userCredential); // Connect to Azure DevOps Uri collectionUri = new Uri($"https://dev.azure.com/{this.OrganizationName}"); VssOAuthAccessTokenCredential oAuthCredentials = new VssOAuthAccessTokenCredential(this.AuthenticationResult.AccessToken); VssCredentials vssCredentials = oAuthCredentials; this.VssConnection = new VssConnection(collectionUri, vssCredentials); }
/// <summary> /// Connects to a client. /// </summary> /// <typeparam name="T">The client type.</typeparam> /// <param name="token">The OAuth token.</param> /// <param name="account">The name of the account to connect to.</param> /// <returns>A client.</returns> private async Task <T> ConnectAsync <T>(OAuthToken token, string account = null) where T : VssHttpClientBase { var credentials = new VssOAuthAccessTokenCredential(new VssOAuthAccessToken(token.AccessToken)); var uri = !string.IsNullOrWhiteSpace(account) ? new Uri(string.Format(CultureInfo.InvariantCulture, VstsUrl, account)) : this.vstsAppUrl; return(await new VssConnection(uri, credentials).GetClientAsync <T>()); }
public IEnumerable <TeamProjectReference> InteractiveADAL(string vstsAccountName, string applicationId) { AuthenticationContext authenticationContext = new AadAuthenticationContext("https://login.windows.net/common", validateAuthority: true); var authenticationResultTask = authenticationContext.AcquireTokenAsync(VSTSResourceId, applicationId, new Uri(RedirectUri), new PlatformParameters(PromptBehavior.Auto)); AuthenticationResult authenticationResult = authenticationResultTask.Result; VssOAuthAccessTokenCredential oAuthCredential = new VssOAuthAccessTokenCredential(authenticationResult.AccessToken); return(ListProjectsViaClientLibrary(vstsAccountName, oAuthCredential)); }
public override VssCredentials GetVssCredentials(IHostContext context) { Tracing trace = context.GetTrace("OuthAccessToken"); trace.Info("GetVssCredentials()"); var loginCred = new VssOAuthAccessTokenCredential("sometoken"); VssCredentials creds = new VssCredentials(loginCred); trace.Verbose("cred created"); return(creds); }
public IEnumerable <TeamProjectReference> DeviceCodeADAL(string vstsAccountName, string applicationId) { Guid tenant = GetAccountTenant(vstsAccountName); AuthenticationContext authenticationContext = new AadAuthenticationContext("https://login.windows.net/" + tenant, validateAuthority: true); DeviceCodeResult codeResult = authenticationContext.AcquireDeviceCodeAsync(VSTSResourceId, applicationId).Result; Console.WriteLine("You need to sign in."); Console.WriteLine("Message: " + codeResult.Message + "\n"); AuthenticationResult authenticationResult = authenticationContext.AcquireTokenByDeviceCodeAsync(codeResult).Result; VssOAuthAccessTokenCredential oAuthCredential = new VssOAuthAccessTokenCredential(authenticationResult.AccessToken); return(ListProjectsViaClientLibrary(vstsAccountName, oAuthCredential)); }
/// <summary> /// Init Devops clients with an access token (bearer) /// </summary> private void ConnectWithBearerToken(string bearerToken) { Uri collectionUri = new Uri($"https://dev.azure.com/{this.OrganizationName}"); this.logger.LogInformation($"Connect to {collectionUri} using bearer token"); VssOAuthAccessTokenCredential oAuthCredentials = new VssOAuthAccessTokenCredential(bearerToken); VssCredentials vssCredentials = oAuthCredentials; this.VssConnection = new VssConnection(collectionUri, vssCredentials); // Configure timeout and retry on DevOps HTTP clients this.VssConnection.Settings.SendTimeout = TimeSpan.FromMinutes(5); }
public async Task <VssConnection> GetConnectionAsync() { var token = await GetTokenAsync() .ConfigureAwait(false); if (token is null) { return(null); } var connectionUri = new Uri(token.Organization); var connectionCred = new VssOAuthAccessTokenCredential(token.AccessToken); return(new VssConnection(connectionUri, connectionCred)); }
protected async Task <T> ConnectAsync <T>(OAuthToken token, string account = null, bool isRm = false) where T : VssHttpClientBase { var credentials = new VssOAuthAccessTokenCredential(new VssOAuthAccessToken(token.AccessToken)); var uri = this.vstsAppUrl; if (!string.IsNullOrWhiteSpace(account)) { uri = isRm ? new Uri(string.Format(CultureInfo.InvariantCulture, VstsRmUrl, HttpUtility.UrlEncode(account))) : new Uri(string.Format(CultureInfo.InvariantCulture, VstsUrl, HttpUtility.UrlEncode(account))); } return(await new VssConnection(uri, credentials).GetClientAsync <T>()); }
public async Task <T> GetUserClient <T>() where T : VssHttpClientBase { ClaimsPrincipal user = httpContextAccessor.HttpContext.User; if (user.Identity.IsAuthenticated) { Claim id = user.Claims.Single(v => v.Type == ClaimTypes.NameIdentifier); ActiveUser activeUser = await activeUsers.Get(id.Value); var credentials = new VssOAuthAccessTokenCredential(activeUser.AccessToken); var connection = new VssConnection(new Uri(config.OrganizationBaseUrl), credentials); return(connection.GetClient <T>()); } else { throw new Exception("User is no authenticated"); } }
public async Task <Revision> QueueBuild(AzureDevOpsSettings azureDevOps, QueueBuildRequest queueBuildRequest, string accessToken) { var credentials = new VssOAuthAccessTokenCredential(accessToken); var connection = new VssConnection( new Uri($"https://dev.azure.com/{azureDevOps.Organization}"), credentials); try { var buildClient = connection.GetClient <BuildHttpClient>(); var definition = await buildClient.GetDefinitionAsync(azureDevOps.Project, int.Parse(azureDevOps.BuildDefinition)); Dictionary <string, string> parameters = queueBuildRequest.Variables.ToDictionary(v => v.Key, v => v.Value); Build build = new Build { Definition = definition, Project = definition.Project, SourceBranch = queueBuildRequest.Branch, Parameters = JsonConvert.SerializeObject(parameters) }; var response = await buildClient.QueueBuildAsync(build); var revision = new Revision() { RevisionNumber = response.Id.ToString(), Requestor = response.RequestedBy.DisplayName, CreatedTime = DateTimeOffset.Now }; return(revision); } catch (Exception) { return(null); } }