/// <summary> /// <para>Uses credentials to authenticate with the Azure tenant and acquire the necessary /// access tokens to exchange for a VSTS personal access token.</para> /// <para>Tokens acquired are stored in the secure secret stores provided during /// initialization.</para> /// </summary> /// <param name="targetUri">The unique identifier for the resource for which access is to /// be acquired.</param> /// <param name="credentials">The credentials required to meet the criteria of the Azure /// tenant authentication challenge (i.e. username + password).</param> /// <param name="requestCompactToken"> /// <para>Requests a compact format personal access token; otherwise requests a standard /// personal access token.</para> /// <para>Compact tokens are necessary for clients which have restrictions on the size of /// the basic authentication header which they can create (example: Git).</para> /// </param> /// <returns><see langword="true"/> if authentication and personal access token acquisition was successful; otherwise <see langword="false"/>.</returns> public async Task <bool> NoninteractiveLogonWithCredentials(TargetUri targetUri, Credential credentials, bool requestCompactToken) { BaseSecureStore.ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("VstsAadAuthentication::NoninteractiveLogonWithCredentials"); try { TokenPair tokens; if ((tokens = await this.VstsAuthority.AcquireTokenAsync(targetUri, this.ClientId, this.Resource, credentials)) != null) { Trace.WriteLine(" token acquisition succeeded"); this.StoreRefreshToken(targetUri, tokens.RefeshToken); return(await this.GeneratePersonalAccessToken(targetUri, tokens.AccessToken, requestCompactToken)); } } catch (AdalException) { Trace.WriteLine(" token acquisition failed"); } Trace.WriteLine(" non-interactive logon failed"); return(false); }
/// <summary> /// Validates that a set of credentials grants access to the target resource. /// </summary> /// <param name="targetUri">The unique identifier for the resource for which credentials /// are being validated against.</param> /// <param name="credentials">The credentials to validate.</param> /// <returns>True is successful; otherwise false.</returns> public async Task <bool> ValidateCredentials(Uri targetUri, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("GithubAuthentication::ValidateCredentials"); return(await GithubAuthority.ValidateCredentials(targetUri, credentials)); }
/// <summary> /// Sets a <see cref="Credential"/> in the storage used by the authentication object. /// </summary> /// <param name="targetUri"> /// The uniform resource indicator used to uniquely identify the credentials. /// </param> /// <param name="credentials">The value to be stored.</param> /// <returns><see langword="true"/> if successful; otherwise <see langword="false"/>.</returns> public override bool SetCredentials(TargetUri targetUri, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("BasicAuthentication::SetCredentials"); this.CredentialStore.WriteCredentials(targetUri, credentials); return(true); }
/// <summary> /// Sets a <see cref="Credential"/> in the storage used by the authentication object. /// </summary> /// <param name="targetUri"> /// The uniform resource indicator used to uniquely identitfy the credentials. /// </param> /// <param name="credentials">The value to be stored.</param> /// <returns>True if successful; otherwise false.</returns> public override bool SetCredentials(Uri targetUri, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("GithubAuthentication::SetCredentials"); PersonalAccessTokenStore.WriteCredentials(targetUri, credentials); return(true); }
/// <summary> /// Sets credentials for future use with this authentication object. /// </summary> /// <remarks>Not supported.</remarks> /// <param name="targetUri"> /// The uniform resource indicator of the resource access tokens are being set for. /// </param> /// <param name="credentials">The credentials being set.</param> /// <returns><see langword="true"/> if successful; <see langword="false"/> otherwise.</returns> public override bool SetCredentials(TargetUri targetUri, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("VstsMsaAuthentication::SetCredentials"); Trace.WriteLine(" setting AAD credentials is not supported"); // does nothing with VSTS AAD backed accounts return(false); }
/// <summary> /// Writes credentials for a target URI to the credential store /// </summary> /// <param name="targetUri">The URI of the target for which credentials are being stored</param> /// <param name="credentials">The credentials to be stored</param> public void WriteCredentials(Uri targetUri, Credential credentials) { ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("CredentialStore::WriteCredentials"); string targetName = this.GetTargetName(targetUri); this.WriteCredential(targetName, credentials); }
/// <summary> /// Writes credentials for a target URI to the credential store /// </summary> /// <param name="targetUri">The URI of the target for which credentials are being stored</param> /// <param name="credentials">The credentials to be stored</param> public void WriteCredentials(TargetUri targetUri, Credential credentials) { BaseSecureStore.ValidateTargetUri(targetUri); Credential.Validate(credentials); Trace.WriteLine("SecretCache::WriteCredentials"); string targetName = this.GetTargetName(targetUri); lock (_cache) { if (_cache.ContainsKey(targetName)) { _cache[targetName] = credentials; } else { _cache.Add(targetName, credentials); } } }