/// <summary>
        /// Authenticates with the specified credentials, and returns a session or null if the authentication failed.
        /// </summary>
        public async Task<string> AuthenticateAsync( string userName, string password, bool rememberMe )
        {
            var keyResponse = await _client.GetAsync( OAuth2Url, TokenRequestParameters );
            string requestKey = GetUrlParameterValue( keyResponse.RequestUrl, TequilaRequestKeyParameter );

            if ( await AuthenticateAsync( userName, password, requestKey ) )
            {
                var codeResponse = await _client.GetAsync( OAuth2Url, CodeRequestParameters );
                string code = GetUrlParameterValue( codeResponse.RequestUrl, TequilaCodeParameter );

                var sessionRequest = new SessionRequest
                {
                    TequilaToken = code,
                    RememberMe = rememberMe
                };
                var sessionResponse = await _authenticationService.GetSessionAsync( sessionRequest );

                if ( sessionResponse.Status == ResponseStatus.Success )
                {
                    return sessionResponse.Session;
                }
            }
            return null;
        }
 public Task<SessionResponse> GetSessionAsync( SessionRequest request )
 {
     return Task.FromResult( new SessionResponse() );
 }