public async Task <Credential> NoninteractiveLogon(TargetUri targetUri, bool requestCompactToken) { BaseSecureStore.ValidateTargetUri(targetUri); try { Token token; if ((token = await Authority.NoninteractiveAcquireToken(targetUri, ClientId, Resource, new Uri(RedirectUrl))) != null) { Trace.WriteLine($"token acquisition for '{targetUri}' succeeded"); return(await GeneratePersonalAccessToken(targetUri, token, requestCompactToken)); } } catch (AuthenticationException) { Trace.WriteLine($"failed to acquire for '{targetUri}' token from VstsAuthority."); } Trace.WriteLine($"non-interactive logon for '{targetUri}' failed"); return(null); }
/// <summary> /// Generates a "personal access token" or service specific, usage restricted access token. /// <para/> /// Returns `<see langword="true"/>` if successful; `<see langword="false"/>` otherwise. /// </summary> /// <param name="targetUri">The target resource for which to acquire the personal access token for.</param> /// <param name="accessToken">Azure Directory access token with privileges to grant access to the target resource.</param> /// <param name="requestCompactToken">Generates a compact token if `<see langword="true"/>`; generates a self describing token if `<see langword="false"/>`.</param> protected async Task <Credential> GeneratePersonalAccessToken( TargetUri targetUri, Token accessToken, bool requestCompactToken) { if (targetUri is null) { throw new ArgumentNullException(nameof(targetUri)); } if (accessToken is null) { throw new ArgumentNullException(nameof(accessToken)); } Credential credential = null; Token personalAccessToken; if ((personalAccessToken = await Authority.GeneratePersonalAccessToken(targetUri, accessToken, TokenScope, requestCompactToken)) != null) { credential = (Credential)personalAccessToken; Trace.WriteLine($"personal access token created for '{targetUri}'."); try { await PersonalAccessTokenStore.WriteCredentials(targetUri, credential); } catch (Exception exception) { System.Diagnostics.Debug.WriteLine(exception); Trace.WriteLine($"failed to write credentials to the secure store."); Trace.WriteException(exception); } } return(credential); }
/// <summary> /// Creates an interactive logon session, using ADAL secure browser GUI, which enables users to authenticate with the Azure tenant and acquire the necessary access tokens to exchange for a VSTS personal access token. /// <para/> /// Tokens acquired are stored in the secure secret stores provided during initialization. /// <para/> /// Return a `<see cref="Credential"/>` for resource access if successful; otherwise `<see langword="null"/>`. /// </summary> /// <param name="targetUri">The URI of the VSTS resource.</param> public async Task <Credential> InteractiveLogon(TargetUri targetUri, PersonalAccessTokenOptions options) { BaseSecureStore.ValidateTargetUri(targetUri); try { Token token; if ((token = await Authority.InteractiveAcquireToken(targetUri, ClientId, Resource, new Uri(RedirectUrl), null)) != null) { Trace.WriteLine($"token acquisition for '{targetUri}' succeeded."); return(await GeneratePersonalAccessToken(targetUri, token, options)); } } catch (AdalException) { Trace.WriteLine($"token acquisition for '{targetUri}' failed."); } Trace.WriteLine($"interactive logon for '{targetUri}' failed"); return(null); }
/// <summary> /// Opens an interactive logon prompt to acquire an authentication token from the Microsoft Live authentication and identity service. /// <para/> /// Returns a `<see cref="Credential"/>` for packing into a basic authentication header; otherwise `<see langword="null"/>`. /// </summary> /// <param name="targetUri">The URI of the resource access is being requested for.</param> /// <param name="requestCompactToken">`<see langword="true"/>` if requesting a compact format token; otherwise `<see langword="false"/>`.</param> public async Task <Credential> InteractiveLogon(TargetUri targetUri, bool requestCompactToken) { BaseSecureStore.ValidateTargetUri(targetUri); try { Token token; if ((token = await Authority.InteractiveAcquireToken(targetUri, ClientId, Resource, new Uri(RedirectUrl), QueryParameters)) != null) { Trace.WriteLine($"token '{targetUri}' successfully acquired."); return(await GeneratePersonalAccessToken(targetUri, token, requestCompactToken)); } } catch (AdalException exception) { Debug.Write(exception); } Trace.WriteLine($"failed to acquire token for '{targetUri}'."); return(null); }
/// <summary> /// Validates that a set of credentials grants access to the target resource. /// <para/> /// Returns `<see langword="true"/>` if successful; otherwise `<see langword="false"/>`. /// </summary> /// <param name="targetUri">The target resource to validate against.</param> /// <param name="credentials">The credentials to validate.</param> public async Task <bool> ValidateCredentials(TargetUri targetUri, Credential credentials) { return(await Authority.ValidateCredentials(targetUri, credentials)); }