如何命名 Windows Azure SharedAccessBlobPolicy 键

2024-02-28

我正在尝试让一些第三方访问我的天蓝色 Blob 容器。 我希望他们能够读取容器内的任何文件。

我在遵循以下指导后使用以下代码http://www.windowsazure.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-2/ http://www.windowsazure.com/en-us/documentation/articles/storage-dotnet-shared-access-signature-part-2/

但是我想为不同的第三方创建不同的密钥。

例如我将与 companyA 分享的一把钥匙 我将与 companyB 分享的另一个密钥

无论如何我可以命名这些键,例如密钥公司A、密钥公司B

我想给它们起一个合理的名称的原因是,如果您与公司的协议到期,我可以搬进去并删除该密钥。

public Void CreateAccessKeyBlob()
{

    const string accountName = "myAccountName";
    const string primaryAccessKey = "myAccessKey";

    var conn = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", accountName, primaryAccessKey);

    var storageAccount = CloudStorageAccount.Parse(conn);

    //Create the blob client object.
    var blobClient = storageAccount.CreateCloudBlobClient();

    //Get a reference to a container to use for the sample code, and create it if it does not exist.
    var container = blobClient.GetContainerReference("myContainer");

    var sasConstraints = new SharedAccessBlobPolicy
    {
        SharedAccessExpiryTime = DateTime.UtcNow.AddYears(50),
        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
    };

    //Generate the shared access signature on the container, setting the constraints directly on the signature.
    var sasContainerToken = container.GetSharedAccessSignature(sasConstraints);

    Console.ReadLine();
}

不幸的是,我认为您对共享访问签名的方式有一些误解。

共享访问签名(简单地说)是访问一组资源的数字签名权限单。签名基于作为查询字符串参数包含在 URL 中的参数(区域、访问类型、开始/结束时间等)。然后,我们生成并附加一个“签名”,它是这些参数的哈希值和存储帐户的“密钥”。

因此,两个签名之间唯一真正的区别是其创建时使用的参数。

签名一旦生成,就无法撤销。但是,如果签名基于存储帐户访问策略(基本上是分配共享访问签名参数的快捷方式),则如果删除该策略,签名将无效。这是因为策略是与签名关联的参数,一旦删除该策略,签名当然无法得到验证。

现在您可能认为可以为每个客户设置不同的策略。但是...可以与存储帐户关联的策略数量有限制(我上次检查的是 5 个)。所以这确实无法扩展以支持多租户解决方案。

现在另一个关键点是,您共享的代码中提到的“密钥”是WA存储帐户密钥。其中只有 2 个,它们是由系统为您生成的。切勿与不需要整个存储帐户的完全管理权限的任何人共享这些内容。您真正与客户共享的是我们之前讨论过的签名。

综上所述,在不了解有关您的场景要求的更多详细信息的情况下,我建议您探索使用外观或看门人风格的模式。通过外观,您可以建立一个服务来验证/授权请求,然后从存储中检索请求的内容。这种方法允许您在调用中引入缓存等概念,以及为更复杂的请求类型聚合结果。在这种情况下,网守模式也相当简单,生成更短时间的共享访问签名(小时/天而不是几周/几个月)。用户将提供某种类型的凭据,然后您可以将其与数据库进行比较,以确定他们是否获得共享访问签名。

我希望这有帮助。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何命名 Windows Azure SharedAccessBlobPolicy 键 的相关文章

随机推荐

  • 使用 Boost Python 和 std::shared_ptr

    我正在尝试让 Boost Python 与 std shared ptr 很好地配合 目前 我收到此错误 Traceback most recent call last File test py line 13 in
  • C# 中强制垃圾回收的最佳实践

    根据我的经验 似乎大多数人都会告诉您强制垃圾收集是不明智的 但在某些情况下 您正在处理的大型对象并不总是在 0 代中收集 但内存是一个问题 是强制收集可以吗 有这样做的最佳实践吗 最佳实践是不强制进行垃圾回收 根据 MSDN 强制垃圾是可能
  • 谁能推荐一个Java富文本编辑器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Cloud Endpoints 中的客户端库。 jar 导入不起作用

    我为我的 appengine python 应用程序创建了一个 jar 文件 我已按照以下步骤导入我的库 jar 文件这个例子 https developers google com appengine docs python endpoi
  • Java 中的最终变量操作

    谁能告诉我下面这行在 Java 上下文中的含义是什么 最终变量仍然可以是 被操纵 除非它是不可变的 据我所知 通过将任何变量声明为最终变量 您将无法再次更改它 那么它们的含义是什么不可变的在上面一行 这意味着如果您的最终变量是引用类型 即不
  • nginx:使用环境变量

    我有以下场景 我有一个环境变量 SOME IP已定义并希望在 nginx 块中使用它 参考Nginx 文档 http wiki nginx org CoreModule我用env指令中的nginx conf文件如下 user www dat
  • 媒体基金会 onReadSample 返回的样本大小错误

    我正在致力于将捕获库从 DirectShow 转换为 MediaFoundation 捕获库似乎工作得很好 但我在运行 Windows 8 32 位的平板电脑上遇到集成网络摄像头的问题 枚举捕获格式时 如中所述媒体基金会文档 http ms
  • Visual Studio 2013 中的调用目标引发了异常

    今天我打开的时候Visual Studio 2013 Professional Edition 我得到了错误exception has been thrown by a target of invocation 我也尝试打开ILSpy调试一
  • 更新 RDLC 报告中的数据源

    我正在使用 SQL 视图将数据传递到 RDLC 报告 现在 如果我向 SQL 视图添加一列 如何在 RDLC 报告中获取这个新添加的列 目前 我必须删除 RDLC 数据集并每次创建新的数据集 这根本不可行 希望有人有更好的方法来做到这一点
  • 通过ajax调用将文本加载到textarea中

    我想将从 dB 检索到的一些文本加载到文本区域中 用户点击一个链接 a class editlink href a JQuery 将 ID 传递给 GO PHP editlink click function get go php para
  • spring-data-jpa: ORA-01795: 列表中表达式的最大数量为 1000

    我正在使用 Spring Data JPA 我想从 a 获取 client id 的交易List
  • 修复 IE 错误:总是一个好主意吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Internet Explorer 改进a lot在过去的 3 年里 自 IE 10 以来 IE 已经成为一个相当不错的浏览器 具有良好的性能
  • 如何将日期时间字符串转换为 UTC 以在 Highcharts 上绘制点

    我正在研究 HighCharts 样条不规则数据 这里数据传递为 data Date UTC 1970 9 27 0 Date UTC 1970 10 10 0 6 Date UTC 1970 10 18 0 7 Date UTC 1970
  • jQuery Draggable - 通过单击元素开始拖动元素,无需按住鼠标

    考虑一个基本的 jQuery Draggable 元素 有没有什么方法可以通过单击鼠标开始拖动元素 即 当元素被单击时 它进入拖动状态 并开始跟随鼠标 当再次单击时 它会掉落到原来的位置 如果这无法通过 jQuery 实现 那么是否可以通过
  • PHP启动:无法加载动态库

    我正在尝试使用 Firebird 2 5 2 26539 视窗8 阿帕奇2 2 22 PHP 5 4 10 当我在 php 中启用 firebird 扩展时 extension php interbase dll extension php
  • 如何安装 cython [重复]

    这个问题在这里已经有答案了 在Windows上安装Kivy的过程中 我发现我需要Cython 我尝试使用安装它easy install cython 但这给出了以下错误 error Unable to find vcvarsall bat
  • 年、月、日中 2 天之间的差异[重复]

    这个问题在这里已经有答案了 我需要输出年 月 日中两天的差值 通过时间跨度和减法 我只能得到天数 但是否有可能以年 月和日为单位输出 这是我到目前为止所拥有的 public string Leeftijdsverschil DateTime
  • 如何找到二值图像中的连通分量?

    我正在寻找一种算法来查找二进制图像中的所有连接组件 如果我们将图像视为矩阵 它看起来像 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0 我想找到所有接触的 对角线的 以及 在此示例中 只有一个组件 但图像中可
  • 如何使用 Chrome 扩展从活动选项卡中获取段落?

    In my background html我正在得到id url and title当前选项卡如下所示 chrome tabs getSelected null function tab tabId tab id tabUrl tab ur
  • 如何命名 Windows Azure SharedAccessBlobPolicy 键

    我正在尝试让一些第三方访问我的天蓝色 Blob 容器 我希望他们能够读取容器内的任何文件 我在遵循以下指导后使用以下代码http www windowsazure com en us documentation articles stora