SAS令牌中“se”的值无效

时间:2016-07-29 12:09:51

标签: azure azure-storage azcopy

我已经创建了一个SAS令牌,如果我使用URL访问私有容器,它似乎有效: https://mystorage.blob.core.windows.net/mycontainer?restype=container&comp=list&sv=2015-12-11&sr=c&sig=11111111111123%3D&se=2016-07-29T11%3A32%3A28Z&sp=cwl

代码:

 SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy()
        {
            Permissions = SharedAccessBlobPermissions.Create | 
                            SharedAccessBlobPermissions.Write | 
                            SharedAccessBlobPermissions.List |
                            SharedAccessBlobPermissions.Read,
            SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(15)
        };

        var blobStorage = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobStorage.GetContainerReference(blobContainerName);

        string sasContainerToken = container.GetSharedAccessSignature(policy);

但是当我在AzCopy中使用这个sasContainerToken时(来自批处理文件),我收到以下错误:

[2016-07-29 14:00:38][ERROR] The syntax of the command is incorrect.
Invalid SAS  token in parameter "DestSAS". Value of "se" is invalid in SAS token.

问题似乎与时间有关,使用“%3A”进行转义,将其更改为“:”可以解决错误,但现在由于SAS不正确而未获得授权。

有什么想法吗?

更新: 从Azure门户生成帐户SAS似乎解决了AzCopy错误,但仍然从单个blob上传访问被拒绝

AzCopy 
  /Source:C:\temp\myfiles 
  /Dest:"https://mystorage.blob.core.windows.net/mycontainer" 
  /DestSas:"?sv=2015-04-05&ss=bfqt&srt=sco&sp=rwdlacup&se=2016-07-30T21:11:31Z&st=2016-07-28T13:11:31Z&spr=https&sig=p%2FlCgbgMRU7lH7111111YyxEDE21rZWFo4%3D"

将/ DestSas更改为/ DestKey(使用有效密钥)有效,但授予的权限太多

1 个答案:

答案 0 :(得分:3)

您是否在* .bat?

等脚本中运行AzCopy

如果是这样,“se = 2016-07-29T11%3A32%3A28Z”需要将“%”加倍“se = 2016-07-29T11 %% 3A32 %% 3A28Z”。这是因为“%3”在* .bat中具有特定含义。 (您需要将SAS中的所有“%”加倍

请注意,所有“%3A”不应转换回“:”,否则SAS将被拒绝访问。

BTW,你使用哪个AzCopy版本? SAS问题也可能是由于AzCopy与客户端库之间的客户端库版本不匹配而导致生成SAS。