Beispiel #1
0
        Task <WebResponse> HttpPostAsync(Uri uri, string content = null, ITokenPair tokens = null)
        {
            var request = (HttpWebRequest)WebRequest.Create(uri);

            request.Method      = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            OnPostRequest(request, content, tokens);

            if (content != null)
            {
                // not "using" rs as per CA2202
                Stream rs = null;
                try
                {
                    rs = Task.Factory.FromAsync <Stream>(request.BeginGetRequestStream, request.EndGetRequestStream, null).Result;
                    using (var sw = new StreamWriter(rs))
                    {
                        rs = null;
                        sw.Write(content);
                    }
                }
                finally
                {
                    if (rs != null)
                    {
                        rs.Dispose();
                    }
                }
            }

            return(request.GetResponseAsync(Timeout));
        }
        public void SetToken_NeedRefresh()
        {
            ITokenPair tokenPair = GetToken(TestMsJwtProviderBase.CreateClaim(), TestMsJwtProviderBase.CreatePayload());

            TokenManager refresher = CreateRefresher(TestConstants.AccessTokenLifetimeSeconds);

            refresher.SetToken(tokenPair);

            Assert.IsTrue(refresher.NeedRefreshToken());
        }
        public void RefreshToken()
        {
            ITokenPair tokenPair = GetToken(TestMsJwtProviderBase.CreateClaim(), TestMsJwtProviderBase.CreatePayload());

            TokenManager refresher = CreateRefresher(TestConstants.AccessTokenLifetimeSeconds / 2);

            refresher.SetToken(tokenPair);

            Assert.IsFalse(refresher.NeedRefreshToken());

            DateTimeOffset lastExpiration = refresher.GetTokenExpiration().Value;

            System.Threading.Thread.Sleep(1000);

            DateTimeOffset expectedExpiration = DateTimeOffset.UtcNow.AddSeconds(TestConstants.AccessTokenLifetimeSeconds);

            refresher.RefreshToken();

            Assert.IsTrue(lastExpiration < refresher.GetTokenExpiration().Value);
            Assert.IsTrue(expectedExpiration <= refresher.GetTokenExpiration().Value);
        }
        void Authorize(WebRequest request, string content = null, ITokenPair tokens = null)
        {
            if (tokens == null)
            {
                tokens = m_accessToken;
            }

            var oauth_nonce     = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(DateTime.Now.Ticks.ToString()));
            var timeSpan        = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString();
            var resource_url    = request.RequestUri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.Unescaped);

            var parms = new SortedDictionary <string, string>
            {
                { "oauth_consumer_key", m_consumerKey },
                { "oauth_nonce", oauth_nonce },
                { "oauth_signature_method", "HMAC-SHA1" },
                { "oauth_timestamp", oauth_timestamp },
                { "oauth_version", "1.0" },
                { "oauth_token", tokens.Token },
            };

            if (!String.IsNullOrEmpty(request.RequestUri.Query))
            {
                foreach (var p in request.RequestUri.Query.Substring(1).Split('&'))
                {
                    var kv = p.Split('=');
                    parms.Add(kv[0], kv[1]);
                }
            }

            if (content != null)
            {
                foreach (var p in content.Split('&'))
                {
                    var kv = p.Split('=');
                    parms.Add(kv[0], kv[1]);
                }
            }

            var baseString = parms.First().Key + "=" + parms.First().Value;

            foreach (var p in parms.Skip(1))
            {
                baseString += "&" + p.Key + "=" + p.Value;
            }

            baseString = request.Method + "&" + Uri.EscapeDataString(resource_url) + "&" + Uri.EscapeDataString(baseString);

            var compositeKey = Uri.EscapeDataString(m_consumerSecret) + "&" + Uri.EscapeDataString(tokens.Secret);

            string oauth_signature;

            oauth_signature = m_platformAdaptor.ComputeSha1Hash(compositeKey, baseString);
            //using (var hasher = new HMACSHA1(UTF8Encoding.UTF8.GetBytes(compositeKey)))
            //{
            //    oauth_signature = Convert.ToBase64String(hasher.ComputeHash(UTF8Encoding.UTF8.GetBytes(baseString)));
            //}

            var authHeader = string.Format("OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"{1}\", oauth_consumer_key=\"{2}\", oauth_signature=\"{3}\", oauth_token=\"{4}\", oauth_version=\"1.0\"",
                                           Uri.EscapeDataString(oauth_nonce),
                                           Uri.EscapeDataString(oauth_timestamp),
                                           Uri.EscapeDataString(m_consumerKey),
                                           Uri.EscapeDataString(oauth_signature),
                                           Uri.EscapeDataString(tokens.Token));

            request.Headers["Authorization"] = authHeader;
        }
 void OnPostRequest(WebRequest request, string content = null, ITokenPair tokens = null)
 {
     Authorize(request, content, tokens);
 }
 /// <summary>
 /// Sets the token.
 /// </summary>
 /// <param name="token"></param>
 public void SetToken(ITokenPair token)
 {
     CurrentAccessToken  = token?.AccessToken;
     CurrentRefreshToken = token?.RefreshToken;
 }
        /// <summary>
        /// Refreshes the access token.
        /// </summary>
        /// <returns></returns>
        public void RefreshToken()
        {
            ITokenPair newToken = RefreshToken(CurrentRefreshToken?.TokenString);

            SetToken(newToken);
        }
Beispiel #8
0
 protected Task <WebResponse> HttpPostAsync(string relativeUri, string content = null, ITokenPair tokens = null)
 {
     return(HttpPostAsync(new Uri(BaseUri, relativeUri), content, tokens));
 }