/// <summary> /// Méthode qui permet de générer l'authorisation à une ressource. /// </summary> /// <param name="accessKey">accessKey</param> /// <param name="accessSecretKey">secretkey</param> /// <param name="request">Request</param> /// <param name="domain">domain</param> /// <returns></returns> public string GetAuthorisation(string accessKey, string accessSecretKey, WebRequest request, string domain = "") { AmzSecurityData amzSecurityData = new AmzSecurityData(request, domain); string valuetosign = this.PrepareValueToSign(amzSecurityData); string signature = this.GetSignature(accessSecretKey, valuetosign); string authorization = "AWS" + " " + accessKey + ":" + signature; return(authorization); }
/// <summary> /// Méthode qui permet de vérifier l'autorisation. /// </summary> /// <param name="request"></param> /// <param name="domain"></param> /// <returns></returns> public bool VerifySignature(HttpRequestMessage request, string domain = "") { try { AmzSecurityData amzSecurityData = new AmzSecurityData(request, domain); string valuetosign = this.PrepareValueToSign(amzSecurityData); string authorisation = request.Headers.GetValues("Authorization").FirstOrDefault(); if (!authorisation.Contains("AWS ")) { return(false); } else { string accessKeysignature = authorisation.Substring(4); string[] accesskeySignatureTab = accessKeysignature.Split(':'); if (accesskeySignatureTab.Length != 2) { return(false); } string accessKey = accesskeySignatureTab[0]; string signaturetoverify = accesskeySignatureTab[1]; string accessSecretKey = this.GetAccessSecretKey(accessKey); if (string.IsNullOrEmpty(accessSecretKey)) { return(false); } string signature = this.GetSignature(accessSecretKey, valuetosign); if (signature != signaturetoverify) { return(false); } return(true); } } catch (Exception ex) { return(false); } return(false); }
/// <summary> /// Méthode qui permet de préparer la chaine. /// </summary> /// <param name="amzSecurityData"><seealso cref="AmzSecurityData"/></param> /// <returns></returns> private string PrepareValueToSign(AmzSecurityData amzSecurityData) { return(string.Format("{0}\n{1}\n{2}\n{3}\n{4}{5}", amzSecurityData.Method, amzSecurityData.MD5_ContentType, amzSecurityData.ContentType, amzSecurityData.Date, amzSecurityData.CanonicalizedHeaders, amzSecurityData.CanonicalizedRessources)); }