代码之家  ›  专栏  ›  技术社区  ›  John

如何授权多个客户端应用程序访问我的Azure存储资源?

  •  1
  • John  · 技术社区  · 6 年前

    我希望该应用程序将数据记录到我的Azure存储表中。 (将来,应用程序可能需要使用其他Azure服务。)

    我希望每个不同的客户机被限制在不同的表中,并且只有添加和读取权限-没有更新或删除。

    我希望能够立即撤销一个客户的访问,如果需要的话,不影响其他客户。

    我考虑了3种选择:

    • 我考虑为每个客户机创建一个单独的存储帐户,并为客户机提供该帐户的访问密钥。但这将提供完全访问权限(包括更新和删除)。

    • 我考虑为每个客户机创建一个存储访问策略(SAP),然后在该策略上创建一个共享访问签名(SAS)。客户端可以使用共享访问签名进行连接 (as described here) . 我看到的主要缺点是,如果我希望客户机的应用程序能够访问多个表,那么每个表都需要一个单独的SAP和SAS。我认为这会增加管理开销。

    • 由于应用程序是另一种身份形式,我认为 registering an app 为我的软件的每个实例创建一个标识。但我不知道如何(a)让应用程序将凭据传递到azure存储,或者(b)授予应用程序读取/添加到表的权限。

    但在Azure中,我的组织有一个活动目录,而我不是该目录的管理员。我不知道如何创建Azure用户来访问我的表,而不是作为管理员。

    有人有什么想法或建议吗?

    2 回复  |  直到 4 年前
        1
  •  2
  •   Tom Sun    6 年前

    正如您提到的,每个表都没有SAS令牌。在您的情况下,我建议您可以为每个具有SAS令牌非完全访问权限的客户机提供单独的存储帐户。

    无法验证对Azure表的访问 不支持 斑点 排队 服务 只有

    official document .

        2
  •  0
  •   John    6 年前

    确切地 如何从中的节点使用SAS documentation

    我遵循的步骤是:

    1. 在帐户内创建了一个新表。我下载并使用microsoftazurestorageexplorer来完成这一步和剩下的步骤。门户中可用的存储资源管理器还不能处理表—仅处理blob、文件和队列。
    2. 在表上创建了访问策略(右键单击表,选择“管理访问策略…”
    3. 创建共享访问签名(在表上单击鼠标右键,选择“获取共享访问签名…”,选择上面创建的策略。
    4. 复制生成的URL和查询字符串,以便在下面的代码中引用。请注意,URL包含查询字符串。
    5. 在我电脑上的新文件夹中,运行 npm init
    6. npm install azure-storage 下载库。
    7. 创建一个名为 index.js 内容如下。
    8. node index.js 运行代码。

    请注意,在下面的代码中,我已经修改了我的帐户、表、sasToken等的名称。不要期望它只用于复制和粘贴!

    const azure = require('azure-storage');
    const sasUri = 'https://myaccount.table.core.windows.net/mytable';
    const sasQuery = 'sv=2018-03-28&si=saspolicy&tn=mytable&sig=1%2FgfWdreRKfWpRjhRy3E8MiHDIxH35SPZY5ssU8lKw%3D';
    const tableService = new azure.TableService(null,null,sasUri,sasQuery);
    const item = {
      PartitionKey: {'_':'keyvalue'},
      RowKey: {'_':'2018-10-10T03:17:21Z'},
      Col1: {'_':23},
      Col2: {'_':423}
    };
    tableService.insertEntity('mytable',item,function(err,result,response){
      if (err) {
        console.error(err);
      } else {
        console.log('success');
        console.log('result = '+JSON.stringify(result,null,'  '));
        console.log('response = '+JSON.stringify(response,null,'  '));
      }
    });
    

    我的下一个挑战是找到描述 '_' entityGenerator function 如果需要,生成这些对象。

    推荐文章