【问题标题】:Azure SAS and PermissionAzure SAS 和权限
【发布时间】:2017-09-23 04:23:26
【问题描述】:

GetSaSForBlobContainer(容器,SharedAccessBlobPermissions.List|SharedAccessBlobPermissions.Read);

public static string **GetSaSForBlobContainer**(CloudBlobContainer blobContainer, SharedAccessBlobPermissions permission)
    {
        var sas = blobContainer.GetSharedAccessSignature(new SharedAccessBlobPolicy()
        {
            Permissions = permission,
            SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),//SAS Start time is back by 5 minutes to take clock skewness into consideration
            SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(15),
        });
        return string.Format(CultureInfo.InvariantCulture, "{0}{1}", blobContainer.Uri, sas);
    }

-- 当我尝试这个时,我的 stroge 帐户中的容器访问是私有的。我可以使用 Internet Explorer 列出容器中的 blob 吗?我尝试使用 blob 和容器访问类型,但总是失败:

AuthenticationFailed 服务器未能验证请求。确保 Authorization 标头的值正确形成,包括签名。 RequestId:2c504f81-0001-00ea-3815-be7271000000 时间:2017-04-25T22:47:20.9382490Z 签名不匹配。使用的签名字符串是 rl 2017-04-25T22:38:15Z 2017-04-25T22:58:15Z /blob/onlineeducation/$root 2015-12-11

但是当我尝试这个时,我可以看到斑点,

 foreach (IListBlobItem blob in blobs)
{
   CloudBlockBlob blob1 = new CloudBlockBlob(blob.Uri);
   string name = blob1.Name;

}

1-) 当我创建 GetSaSForBlobContainer 并且我的容器访问类型是私有时,我不明白一件事会发生什么(对于 Internet Explorer 和代码)?。

2-) 当我在未经许可的情况下获取我的私有容器的引用,然后创建 blob uri + SAS.Example 会发生什么我可以看到我的容器吗?或者我可以只写引用的blob吗(我的blob权限是只写)..

3-会发生什么,容器 uri + sas - Blob uri + sas(权限已读取)=> 我只能上传文件还是在 Internet Explorer 中尝试时可以看到容器。

4-)这里有什么不同,

  • 我的容器访问类型是 private 在我的存储中我得到了 continer 的引用没有任何权限和 SAS,然后使用 r阅读权限和 SAS

  • 容器访问类型是 private 在我的存储中我得到容器的引用 with permssion and SAS,然后使用 read permssion 创建 blob URI和 SAS

【问题讨论】:

  • 您能否详细说明Explorer 的含义?你是指微软的 Azure Storage Explorer 还是 Internet Explorer(浏览器)?
  • 是的先生,我现在编辑的 Internet Explorer :)

标签: azure azure-blob-storage


【解决方案1】:

当我尝试这个时,我在我的 stroge 帐户中的容器访问权限是 私人的。我可以使用 Internet Explorer 列出容器中的 blob 吗?一世 尝试使用 blob 和容器访问类型总是失败

要解决此问题,请首先在您的 SAS 中添加 List 作为权限,然后在您的请求 URL 中添加 &restype=container&comp=list。有关此问题的更多说明,请参阅此主题:Azure Shared Access Signature - Signature did not match

1-) 创建 GetSaSForBlobContainer 时我不明白一件事 并且我的容器访问类型是私有的将会发生什么(对于 Internet 资源管理器和代码)?

除非你用它做点什么,否则什么都不会发生:)。根据 SAS 中包含的权限,拥有此 SAS URL 的用户将能够执行某些操作。例如,如果您创建具有List 权限的 SAS,则用户将只能列出该容器中的 blob。他们甚至无法下载 blob(因为 SAS 必须包含 Read 权限)。

2-) 当我未经许可获得我的私人容器的参考时,以及 然后创建 blob uri + SAS.Example 会发生什么我可以看到我的 容器?还是我只能写引用的 blob(我的 blob 权限 只是写)..

不,您看不到您的容器,因为 SAS 仅用于容器。再次因为您包含 Read 权限,您将只能读取 blob 内容。您将无法上传 Blob。

3-会发生什么,容器 uri + sas - Blob uri + sas(权限 已读取)=> 我可以只上传文件还是可以看到容器 在 Internet Explorer 中尝试时。

不,拥有Read 权限的您无法上传文件。您甚至无法查看具有 Read 权限的 blob 列表。为此,您需要List 权限。

关于 #4,在您实际使用该 SAS URL 之前没有区别。在第一种情况下,您会收到一个错误,而在第二种情况下,您将能够看到 blob。

【讨论】:

  • 所有你的答案对我来说都是宝贵的。我很感激你关于 4# -- 我的容器访问类型在我的存储中是私有的我得到了没有任何权限和 SAS 的 continer 的引用,然后使用创建 blob URI读取权限和 SAS 。 => 我在这里明白,由于读取权限,我只能去我的 blob 并下载它,但是当我尝试查看 blob 的容器(可下载 blob)时,我看不到容器。 (我认为我为 blob 权限和 SAS 创建的内容无关紧要,未经许可且没有 SAS 的容器我可以看到它。)
猜你喜欢
  • 2019-01-23
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2017-09-05
相关资源
最近更新 更多