价值的“SE”是无效的SAS令牌

问题描述:

我创建了一个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价值的“SE”是无效的SAS令牌

代码:

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); 

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

[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. 

的问题似乎是与时间,这是逃脱与T他“%3A”,将其更改为“:”可以解决该错误,但现在我因SAS不正确而未获得授权。

任何想法的?

UPDATE: 生成从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(带有有效密钥的访问denieds )的作品,但给予了太多的权限

+0

你可以尝试创建一个新的SAS,然后将“%3A”替换为“:”? –

+0

我做了,它解决了AzCopy错误,但是然后AzCopy使用这个“损坏”的SAS,它是未经授权的。这似乎是AzCopy正在做一些奇怪的解析,我的笔记本电脑是在荷兰语区,但日期是ISO,所以这不会是一个问题 –

你是否在像* .bat这样的脚本中运行AzCopy?

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

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

顺便说一句,你使用的AzCopy版本? SAS问题也可能是由于AzCopy和客户端库之间的客户端库版本不匹配而导致的。

+0

谢谢,转义“%”做了诡计,我已经尝试过客户端库(6.0) –