/// <summary> /// Authorisation Code - Authorisation Code Flow /// </summary> /// <param name="clientId">Client Id</param> /// <param name="clientSecret">Client Secret</param> /// <param name="accessCode">Access Code</param> /// <param name="cancellationToken">Cancellation Token</param> /// <returns>Authentication Response</returns> public Task <AuthenticationResponse> AuthorisationCodeAsync( string clientId, string clientSecret, AccessCode accessCode, CancellationToken cancellationToken) { var headers = GetHeaders(clientId, clientSecret); var request = new Dictionary <string, string>() { { grant_type, authorization_code }, { code_value, accessCode.Code }, { redirect_uri, accessCode.RedirectUri.ToString() } }; return(PostRequestAsync <Dictionary <string, string>, AuthenticationResponse>(host_name, token_uri, null, cancellationToken, request, null, headers, true)); }
/// <summary> /// Get Authorisation Code Token - Authorisation Code Flow /// </summary> /// <param name="accessCode">Access Code</param> /// <param name="cancellationToken">Cancellation Token</param> /// <returns>Access Token</returns> public async Task <AccessToken> GetAuthorisationCodeTokenAsync( AccessCode accessCode, CancellationToken cancellationToken) { var authenticationResponse = await _client.AuthorisationCodeAsync( _clientId, _clientSecret, accessCode, cancellationToken); if (authenticationResponse != null) { AccessToken = Map(TokenType.User, authenticationResponse); } return(AccessToken); }
/// <summary> /// Get Access Code Auth - Authorisation Code Flow /// </summary> /// <param name="responseUri">Response Uri</param> /// <param name="redirectUri">Redirect Uri</param> /// <param name="state">State Value</param> /// <returns>Access Token</returns> /// <exception cref="AuthCodeValueException">AuthCodeValueException</exception> /// <exception cref="AuthCodeStateException">AuthCodeStateException</exception> public async Task <AccessToken> GetAccessCodeAuthAsync( Uri responseUri, Uri redirectUri, string state) { if (responseUri != null) { if (responseUri.ToString().Contains(redirectUri.ToString())) { if (_accessCode == null || _accessCode.ResponseUri != responseUri) { _accessCode = new AccessCode( responseUri, redirectUri, responseUri.Query.QueryStringAsDictionary()); if (state == null || _accessCode.State == state) { if (string.IsNullOrEmpty(_accessCode.Code)) { throw new AuthCodeValueException(); } else { return(await GetAuthorisationCodeTokenAsync( _accessCode, new CancellationToken(false))); } } else { throw new AuthCodeStateException(); } } } } return(null); }