internal static UriQueryBuilder GetSignature(SharedAccessAccountPolicy policy, string signature, string accountKeyName, string sasVersion) { CommonUtility.AssertNotNull("signature", signature); CommonUtility.AssertNotNull("policy", policy); UriQueryBuilder uriQueryBuilder = new UriQueryBuilder(); AddEscapedIfNotNull(uriQueryBuilder, "sv", sasVersion); AddEscapedIfNotNull(uriQueryBuilder, "sk", accountKeyName); AddEscapedIfNotNull(uriQueryBuilder, "sig", signature); AddEscapedIfNotNull(uriQueryBuilder, "spr", (!policy.Protocols.HasValue) ? null : GetProtocolString(policy.Protocols.Value)); AddEscapedIfNotNull(uriQueryBuilder, "sip", (policy.IPAddressOrRange == null) ? null : policy.IPAddressOrRange.ToString()); AddEscapedIfNotNull(uriQueryBuilder, "st", GetDateTimeOrNull(policy.SharedAccessStartTime)); AddEscapedIfNotNull(uriQueryBuilder, "se", GetDateTimeOrNull(policy.SharedAccessExpiryTime)); string value = SharedAccessAccountPolicy.ResourceTypesToString(policy.ResourceTypes); if (!string.IsNullOrEmpty(value)) { AddEscapedIfNotNull(uriQueryBuilder, "srt", value); } string value2 = SharedAccessAccountPolicy.ServicesToString(policy.Services); if (!string.IsNullOrEmpty(value2)) { AddEscapedIfNotNull(uriQueryBuilder, "ss", value2); } string value3 = SharedAccessAccountPolicy.PermissionsToString(policy.Permissions); if (!string.IsNullOrEmpty(value3)) { AddEscapedIfNotNull(uriQueryBuilder, "sp", value3); } return(uriQueryBuilder); }
internal static string GetHash(SharedAccessAccountPolicy policy, string accountName, string sasVersion, string keyValue) { string text = string.Format(CultureInfo.InvariantCulture, "{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n{9}", accountName, SharedAccessAccountPolicy.PermissionsToString(policy.Permissions), SharedAccessAccountPolicy.ServicesToString(policy.Services), SharedAccessAccountPolicy.ResourceTypesToString(policy.ResourceTypes), GetDateTimeOrEmpty(policy.SharedAccessStartTime), GetDateTimeOrEmpty(policy.SharedAccessExpiryTime), (policy.IPAddressOrRange == null) ? string.Empty : policy.IPAddressOrRange.ToString(), GetProtocolString(policy.Protocols), sasVersion, string.Empty); Logger.LogVerbose(null, "StringToSign = {0}.", text); return(CryptoUtility.ComputeHmac256(keyValue, text)); }
public string GetSharedAccessSignature(SharedAccessAccountPolicy policy) { if (!Credentials.IsSharedKey) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Cannot create Shared Access Signature unless Account Key credentials are used.")); } string hash = SharedAccessSignatureHelper.GetHash(policy, Credentials.AccountName, "2018-03-28", Credentials.Key); return(SharedAccessSignatureHelper.GetSignature(policy, hash, Credentials.KeyName, "2018-03-28").ToString()); }