Example #1
0
        internal static UriQueryBuilder GetSignature(SharedAccessTablePolicy policy, string tableName, string accessPolicyIdentifier, string startPartitionKey, string startRowKey, string endPartitionKey, string endRowKey, string signature, string accountKeyName, string sasVersion, SharedAccessProtocol?protocols, IPAddressOrRange ipAddressOrRange)
        {
            CommonUtility.AssertNotNull("signature", signature);
            UriQueryBuilder uriQueryBuilder = new UriQueryBuilder();

            AddEscapedIfNotNull(uriQueryBuilder, "sv", sasVersion);
            AddEscapedIfNotNull(uriQueryBuilder, "tn", tableName);
            AddEscapedIfNotNull(uriQueryBuilder, "spk", startPartitionKey);
            AddEscapedIfNotNull(uriQueryBuilder, "srk", startRowKey);
            AddEscapedIfNotNull(uriQueryBuilder, "epk", endPartitionKey);
            AddEscapedIfNotNull(uriQueryBuilder, "erk", endRowKey);
            AddEscapedIfNotNull(uriQueryBuilder, "si", accessPolicyIdentifier);
            AddEscapedIfNotNull(uriQueryBuilder, "sk", accountKeyName);
            AddEscapedIfNotNull(uriQueryBuilder, "sig", signature);
            AddEscapedIfNotNull(uriQueryBuilder, "spr", GetProtocolString(protocols));
            AddEscapedIfNotNull(uriQueryBuilder, "sip", ipAddressOrRange?.ToString());
            if (policy != null)
            {
                AddEscapedIfNotNull(uriQueryBuilder, "st", GetDateTimeOrNull(policy.SharedAccessStartTime));
                AddEscapedIfNotNull(uriQueryBuilder, "se", GetDateTimeOrNull(policy.SharedAccessExpiryTime));
                string value = SharedAccessTablePolicy.PermissionsToString(policy.Permissions);
                if (!string.IsNullOrEmpty(value))
                {
                    AddEscapedIfNotNull(uriQueryBuilder, "sp", value);
                }
            }
            return(uriQueryBuilder);
        }
Example #2
0
        /// <summary>
        /// Validate the table access policy
        /// </summary>
        /// <param name="policy">SharedAccessBlobPolicy object</param>
        /// <param name="policyIdentifier">The policy identifier which need to be checked.</param>
        internal static bool ValidateTableAccessPolicy(IStorageTableManagement channel,
                                                       string tableName, XTable.SharedAccessTablePolicy policy, string policyIdentifier)
        {
            if (string.IsNullOrEmpty(policyIdentifier))
            {
                return(true);
            }
            XTable.CloudTable          table      = channel.GetTableReference(tableName);
            XTable.TableRequestOptions options    = null;
            XTable.OperationContext    context    = null;
            XTable.TablePermissions    permission = channel.GetTablePermissions(table, options, context);

            XTable.SharedAccessTablePolicy sharedAccessPolicy =
                GetExistingPolicy <XTable.SharedAccessTablePolicy>(permission.SharedAccessPolicies, policyIdentifier);

            if (policy.Permissions != XTable.SharedAccessTablePermissions.None)
            {
                throw new ArgumentException(Resources.SignedPermissionsMustBeOmitted);
            }

            if (policy.SharedAccessExpiryTime.HasValue && sharedAccessPolicy.SharedAccessExpiryTime.HasValue)
            {
                throw new ArgumentException(Resources.SignedExpiryTimeMustBeOmitted);
            }

            return(!sharedAccessPolicy.SharedAccessExpiryTime.HasValue);
        }
Example #3
0
        public string GetSharedAccessSignature(SharedAccessTablePolicy policy, string accessPolicyIdentifier, string startPartitionKey, string startRowKey, string endPartitionKey, string endRowKey, SharedAccessProtocol?protocols, IPAddressOrRange ipAddressOrRange)
        {
            if (!ServiceClient.Credentials.IsSharedKey)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Cannot create Shared Access Signature unless Account Key credentials are used."));
            }
            string             canonicalName = GetCanonicalName();
            StorageCredentials credentials   = ServiceClient.Credentials;
            string             hash          = SharedAccessSignatureHelper.GetHash(policy, accessPolicyIdentifier, startPartitionKey, startRowKey, endPartitionKey, endRowKey, canonicalName, "2018-03-28", protocols, ipAddressOrRange, credentials.Key);

            return(SharedAccessSignatureHelper.GetSignature(policy, Name, accessPolicyIdentifier, startPartitionKey, startRowKey, endPartitionKey, endRowKey, hash, credentials.KeyName, "2018-03-28", protocols, ipAddressOrRange).ToString());
        }
Example #4
0
        internal static string GetHash(SharedAccessTablePolicy policy, string accessPolicyIdentifier, string startPartitionKey, string startRowKey, string endPartitionKey, string endRowKey, string resourceName, string sasVersion, SharedAccessProtocol?protocols, IPAddressOrRange ipAddressOrRange, string keyValue)
        {
            CommonUtility.AssertNotNullOrEmpty("resourceName", resourceName);
            CommonUtility.AssertNotNull("keyValue", keyValue);
            CommonUtility.AssertNotNullOrEmpty("sasVersion", sasVersion);
            string         text   = null;
            DateTimeOffset?value  = null;
            DateTimeOffset?value2 = null;

            if (policy != null)
            {
                text   = SharedAccessTablePolicy.PermissionsToString(policy.Permissions);
                value  = policy.SharedAccessStartTime;
                value2 = policy.SharedAccessExpiryTime;
            }
            string text2 = string.Format(CultureInfo.InvariantCulture, "{0}\n{1}\n{2}\n{3}\n{4}\n{5}\n{6}\n{7}\n{8}\n{9}\n{10}\n{11}", text, GetDateTimeOrEmpty(value), GetDateTimeOrEmpty(value2), resourceName, accessPolicyIdentifier, (ipAddressOrRange == null) ? string.Empty : ipAddressOrRange.ToString(), GetProtocolString(protocols), sasVersion, startPartitionKey, startRowKey, endPartitionKey, endRowKey);

            Logger.LogVerbose(null, "StringToSign = {0}.", text2);
            return(CryptoUtility.ComputeHmac256(keyValue, text2));
        }
Example #5
0
 public string GetSharedAccessSignature(SharedAccessTablePolicy policy, string accessPolicyIdentifier, string startPartitionKey, string startRowKey, string endPartitionKey, string endRowKey)
 {
     return(GetSharedAccessSignature(policy, accessPolicyIdentifier, startPartitionKey, startRowKey, endPartitionKey, endRowKey, null, null));
 }
Example #6
0
 public string GetSharedAccessSignature(SharedAccessTablePolicy policy, string accessPolicyIdentifier)
 {
     return(GetSharedAccessSignature(policy, accessPolicyIdentifier, null, null, null, null));
 }
Example #7
0
 public string GetSharedAccessSignature(SharedAccessTablePolicy policy)
 {
     return(GetSharedAccessSignature(policy, null, null, null, null, null));
 }