public async Task <FirebaseAccessToken> Send2LOTokenRequestAsync()
        {
            var jwtPayload = _jwtPayload.GetPayload();
            var rsaParams  = _serviceAccountCredentials.GetRSAParams();

            string jwtToken;

            using (var rsa = new RSACryptoServiceProvider())
            {
                rsa.ImportParameters(rsaParams);
                jwtToken = _firebaseConfig.JwtTokenProvider.Encode(jwtPayload, rsa);
            }

            var permissionPayload = new PermissionAuthPayloadGenerator(jwtToken).GetPayload();

            var urlEncodedPayload = new FormUrlEncodedContent(permissionPayload);


            HttpResponseMessage response = await PostAsync(_firebaseConfig.GoogleOAuthTokenPath, urlEncodedPayload);

            await response.EnsureSuccessStatusCodeAsync();

            if (response.Content == null)
            {
                throw new FirebaseHttpException("Authentication failed, empty response content from firebase server");
            }
            var strinRepresentation = await response.Content.ReadAsStringAsync();

            var serializationSettings = new JsonSerializerSettings()
            {
                ContractResolver = new FirebaseAccessTokenContractResolver()
            };

            _accessToken = JsonConvert.DeserializeObject <FirebaseAccessToken>(strinRepresentation, serializationSettings);
            if (_accessToken == null)
            {
                throw new FirebaseHttpException("Authentication failed, unsupported content type was returned from firebase server");
            }
            return(_accessToken);
        }
        private string EncryptPayload(string signingPayloadAsString)
        {
            var          encryptedBase64String = String.Empty;
            UTF8Encoding byteConverter         = new UTF8Encoding();
            var          payloadBytes          = byteConverter.GetBytes(signingPayloadAsString);

            using (var rsa = new RSACryptoServiceProvider())
            {
                rsa.ImportParameters(_credentials.GetRSAParams());
                var encrypt = rsa.SignData(payloadBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
                encryptedBase64String = Convert.ToBase64String(encrypt);
            }
            return(encryptedBase64String);
        }