示例#1
0
        internal static UriQueryBuilder GetSignature(
            SharedAccessAccountPolicy policy,
            string signature,
            string accountKeyName,
            string sasVersion)
        {
            CommonUtility.AssertNotNull("signature", signature);
            CommonUtility.AssertNotNull("policy", policy);

            UriQueryBuilder builder = new UriQueryBuilder();

            AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedVersion, sasVersion);
            AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedKey, accountKeyName);
            AddEscapedIfNotNull(builder, Constants.QueryConstants.Signature, signature);
            AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedProtocols, policy.Protocols == null ? null : GetProtocolString(policy.Protocols.Value));
            AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedIP, policy.IPAddressOrRange == null ? null : policy.IPAddressOrRange.ToString());
            AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedStart, GetDateTimeOrNull(policy.SharedAccessStartTime));
            AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedExpiry, GetDateTimeOrNull(policy.SharedAccessExpiryTime));

            string resourceTypes = SharedAccessAccountPolicy.ResourceTypesToString(policy.ResourceTypes);

            if (!string.IsNullOrEmpty(resourceTypes))
            {
                AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedResourceTypes, resourceTypes);
            }

            string services = SharedAccessAccountPolicy.ServicesToString(policy.Services);

            if (!string.IsNullOrEmpty(services))
            {
                AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedServices, services);
            }

            string permissions = SharedAccessAccountPolicy.PermissionsToString(policy.Permissions);

            if (!string.IsNullOrEmpty(permissions))
            {
                AddEscapedIfNotNull(builder, Constants.QueryConstants.SignedPermissions, permissions);
            }

            return(builder);
        }
示例#2
0
        internal static string GetHash(
            SharedAccessAccountPolicy policy,
            string accountName,
            string sasVersion,
            byte[] keyValue)
        {
            string stringToSign = 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 /* operationContext */, SR.TraceStringToSign, stringToSign);

            return(CryptoUtility.ComputeHmac256(keyValue, stringToSign));
        }