Esempio n. 1
0
        public void Authenticate(RestSharp.IRestClient client, RestSharp.IRestRequest request)
        {
            DateTime signingDate = DateTime.UtcNow;

            SetContentMd5(request);
            SetContentSha256(request);
            SetHostHeader(request, client);
            SetDateHeader(request, signingDate);
            SortedDictionary <string, string> headersToSign = GetHeadersToSign(request);
            string signedHeaders    = GetSignedHeaders(headersToSign);
            string canonicalRequest = GetCanonicalRequest(client, request, headersToSign);

            byte[] canonicalRequestBytes = System.Text.Encoding.UTF8.GetBytes(canonicalRequest);
            string canonicalRequestHash  = BytesToHex(ComputeSha256(canonicalRequestBytes));
            string stringToSign          = GetStringToSign(Region, signingDate, canonicalRequestHash);

            byte[] signingKey = GenerateSigningKey(Region, signingDate);

            byte[] stringToSignBytes = System.Text.Encoding.UTF8.GetBytes(stringToSign);

            byte[] signatureBytes = SignHmac(signingKey, stringToSignBytes);

            string signature = BytesToHex(signatureBytes);

            string authorization = GetAuthorizationHeader(signedHeaders, signature, signingDate, Region);

            request.AddHeader("Authorization", authorization);
        }
Esempio n. 2
0
        public string PresignURL(RestSharp.IRestClient client, RestSharp.IRestRequest request, int expires)
        {
            DateTime signingDate  = DateTime.UtcNow;
            string   requestQuery = "";
            string   path         = request.Resource;

            requestQuery  = "X-Amz-Algorithm=AWS4-HMAC-SHA256&";
            requestQuery += "X-Amz-Credential="
                            + this.AccessKeyId
                            + Uri.EscapeDataString("/" + GetScope(Region, signingDate))
                            + "&";
            requestQuery += "X-Amz-Date="
                            + signingDate.ToString("yyyyMMddTHHmmssZ")
                            + "&";
            requestQuery += "X-Amz-Expires="
                            + expires
                            + "&";
            requestQuery += "X-Amz-SignedHeaders=host";

            string canonicalRequest = GetPresignCanonicalRequest(client, request, requestQuery);

            byte[] canonicalRequestBytes = System.Text.Encoding.UTF8.GetBytes(canonicalRequest);
            string canonicalRequestHash  = BytesToHex(ComputeSha256(canonicalRequestBytes));
            string stringToSign          = GetStringToSign(Region, signingDate, canonicalRequestHash);

            byte[] signingKey        = GenerateSigningKey(Region, signingDate);
            byte[] stringToSignBytes = System.Text.Encoding.UTF8.GetBytes(stringToSign);
            byte[] signatureBytes    = SignHmac(signingKey, stringToSignBytes);
            string signature         = BytesToHex(signatureBytes);

            // Return presigned url.
            return(client.BaseUrl + path + "?" + requestQuery + "&X-Amz-Signature=" + signature);
        }
Esempio n. 3
0
        private string GetCanonicalRequest(RestSharp.IRestClient client, RestSharp.IRestRequest request,
                                           SortedDictionary <string, string> headersToSign)
        {
            LinkedList <string> canonicalStringList = new LinkedList <string>();

            canonicalStringList.AddLast(request.Method.ToString());

            if (!string.IsNullOrWhiteSpace(request.Resource))
            {
                string[] path = request.Resource.Split(new char[] { '?' }, 2);
                if (!path[0].StartsWith("/"))
                {
                    path[0] = "/" + path[0];
                }
                canonicalStringList.AddLast(path[0]);

                string query = "";
                if (path.Length == 2)
                {
                    var parameterString = path[1];
                    var parameterList   = parameterString.Split('&');
                    SortedSet <string> sortedQueries = new SortedSet <string>();
                    foreach (string individualParameterString in parameterList)
                    {
                        if (individualParameterString.Contains('='))
                        {
                            string[] splitQuery = individualParameterString.Split(new char[] { '=' }, 2);
                            sortedQueries.Add(splitQuery[0] + "=" + splitQuery[1]);
                        }
                        else
                        {
                            sortedQueries.Add(individualParameterString + "=");
                        }
                    }
                    query = string.Join("&", sortedQueries);
                }
                canonicalStringList.AddLast(query);
            }

            foreach (string header in headersToSign.Keys)
            {
                canonicalStringList.AddLast(header + ":" + headersToSign[header]);
            }
            canonicalStringList.AddLast("");
            canonicalStringList.AddLast(string.Join(";", headersToSign.Keys));
            if (headersToSign.Keys.Contains("x-amz-content-sha256"))
            {
                canonicalStringList.AddLast(headersToSign["x-amz-content-sha256"]);
            }
            else
            {
                canonicalStringList.AddLast("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
            }

            return(string.Join("\n", canonicalStringList));
        }
Esempio n. 4
0
        private string GetPresignCanonicalRequest(RestSharp.IRestClient client, RestSharp.IRestRequest request, string requestQuery)
        {
            LinkedList <string> canonicalStringList = new LinkedList <string>();

            canonicalStringList.AddLast(request.Method.ToString());

            string path = request.Resource;

            if (!path.StartsWith("/"))
            {
                path = "/" + path;
            }
            canonicalStringList.AddLast(path);
            canonicalStringList.AddLast(requestQuery);
            canonicalStringList.AddLast("host:" + client.BaseUrl.Host);
            canonicalStringList.AddLast("");
            canonicalStringList.AddLast("host");
            canonicalStringList.AddLast("UNSIGNED-PAYLOAD");

            return(string.Join("\n", canonicalStringList));
        }
 public void Authenticate(RestSharp.IRestClient client, RestSharp.IRestRequest request)
 {
     request.AddHeader("Authorization", "Bearer " + _accessToken);
 }
Esempio n. 6
0
 private void SetHostHeader(RestSharp.IRestRequest request, RestSharp.IRestClient client)
 {
     request.AddHeader("Host", client.BaseUrl.Host + (client.BaseUrl.Port != 80 ? ":" + client.BaseUrl.Port : string.Empty));
 }
 private static bool IsValidBaseUrl(RestSharp.IRestClient client, SDK.Http.IHttpRequest request)
 {
     return(request.CanonicalUri
            .ToString()
            .Contains(client.BaseUrl.ToString()));
 }