public async Task <TokenModel> GetTokenAsync(string code, CancellationToken cancellationToken)
        {
            var accessTokenUrl = TokenEndpoint
                                 + "?grant_type=authorization_code"
                                 + "&client_id=" + Uri.EscapeDataString(_options.ClientId)
                                 + "&client_secret=" + Uri.EscapeDataString(_options.ClientSecret)
                                 + "&redirect_uri=" + Uri.EscapeDataString(_options.RedirectUrl())
                                 + "&code=" + Uri.EscapeDataString(code);

            var response = await GetStringResponseAsync(accessTokenUrl, cancellationToken);

            return(TokenModel.From(response));
        }