none
几个关于Azure Storage SAS的问题? RRS feed

  • 问题

  •             CloudStorageAccount cloudStorage = CloudStorageAccount.Parse(connString);
                CloudBlobClient blobClient = cloudStorage.CreateCloudBlobClient();
    
                CloudBlobContainer blobContainer = blobClient.GetContainerReference("abc");
                CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference("hello.txt");
    
                blockBlob.UploadText("Hello World!!!");
    
                string sas = blockBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy
                {
                    Permissions = SharedAccessBlobPermissions.Read,
                    SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddSeconds(30)
                });
    
                string url = blockBlob.Uri.AbsoluteUri + sas;
                

    我用上面的代码得到一个带SAS的url:

    http://???.blob.core.chinacloudapi.cn/abc/hello.txt?sv=2015-02-21&sr=b&sig=ujErokOVB7E7hCLx%2Fz9T9PyymIfjwP75eMMOhc09YrI%3D&se=2015-09-21T09%3A45%3A11Z&sp=r

    在这当中调用了blockBlob.GetSharedAccessSignature(...), 从Fiddler中看出这行代码并没有像Azure服务器发送请求。

    这就有几个问题无法理解:

    1. Azure的服务器上是否存有这个SAS的信息?

    2. 假如我想让这个Url提前失效,又该如何实现?

    3. 假如这个SAS是在客户端生成,Azure又是如何保证用户不会重新生成一个SAS(没有Account Key的情况下)?


    2015年9月21日 9:54

答案

  • Hi,

    >>2. 假如我想让这个Url提前失效,又该如何实现?

    一般以下四种方式会让SAS失效:

    • 达到了对该 SAS 指定的到期时间。
    • 达到了对该 SAS 引用的存储访问策略指定的到期时间(如果引用某一存储访问策略并且该存储访问策略指定一个到期时间)。这可能是因为经过了该间隔而发生,或者是因为你修改了该存储访问策略以使到期时间已经是过去时间而发生(这是用于吊销该 SAS 的一种方法)。
    • 删除了该 SAS 引用的存储访问策略,这是用于吊销 SAS 的另一种方法。请注意,如果你使用完全相同的名称重新创建该存储访问策略,则根据与该存储访问策略相关联的权限,所有现有 SAS 标记都将再次有效(假定尚未经过该 SAS 的到期时间)。如果你想要吊销该 SAS,请确保使用不同时间(如果你使用将来的到期时间重新创建该访问策略)。
    • 将重新生成用于创建 SAS 的帐户密钥。请注意,这样做将导致使用该帐户密钥的所有应用程序组件身份验证失败,直到这些组件更新为使用其他有效帐户密钥或者重新生成的新帐户密钥。

    >>#1 #3

    SAS的一个主要的作用就是保护我们的存储密匙,SAS主要是通过一系类算法得到的一个URL,存储密匙这个也是算法中需要提供的参数,从我个人的经验来看我们尽量让产生SAS URL的功能给到服务端,然后将我们产生的SAS的URL给到我们的client端,服务端主要是通过对SAS进行一些处理来判断客户端的操作是否被许可,并不会存储SAS URL,而且服务端不会限制生成的SAS 条数。

    Best Regards,

    Jambor

    如果您想进一步了解Windows Azure, Windows Azure 官网欢迎您的访问  


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年9月21日 13:45
    版主

全部回复

  • Hi,

    >>2. 假如我想让这个Url提前失效,又该如何实现?

    一般以下四种方式会让SAS失效:

    • 达到了对该 SAS 指定的到期时间。
    • 达到了对该 SAS 引用的存储访问策略指定的到期时间(如果引用某一存储访问策略并且该存储访问策略指定一个到期时间)。这可能是因为经过了该间隔而发生,或者是因为你修改了该存储访问策略以使到期时间已经是过去时间而发生(这是用于吊销该 SAS 的一种方法)。
    • 删除了该 SAS 引用的存储访问策略,这是用于吊销 SAS 的另一种方法。请注意,如果你使用完全相同的名称重新创建该存储访问策略,则根据与该存储访问策略相关联的权限,所有现有 SAS 标记都将再次有效(假定尚未经过该 SAS 的到期时间)。如果你想要吊销该 SAS,请确保使用不同时间(如果你使用将来的到期时间重新创建该访问策略)。
    • 将重新生成用于创建 SAS 的帐户密钥。请注意,这样做将导致使用该帐户密钥的所有应用程序组件身份验证失败,直到这些组件更新为使用其他有效帐户密钥或者重新生成的新帐户密钥。

    >>#1 #3

    SAS的一个主要的作用就是保护我们的存储密匙,SAS主要是通过一系类算法得到的一个URL,存储密匙这个也是算法中需要提供的参数,从我个人的经验来看我们尽量让产生SAS URL的功能给到服务端,然后将我们产生的SAS的URL给到我们的client端,服务端主要是通过对SAS进行一些处理来判断客户端的操作是否被许可,并不会存储SAS URL,而且服务端不会限制生成的SAS 条数。

    Best Regards,

    Jambor

    如果您想进一步了解Windows Azure, Windows Azure 官网欢迎您的访问  


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年9月21日 13:45
    版主
  • 非常感谢。解释很详细!
    2015年9月22日 5:08