繁体   English   中英

Active Directory 从浏览器访问 Azure 存储

[英]Active Directory access Azure Storage from browser

我想使用 Azure Active Directory 来允许用户从单页 Web 应用程序读取和写入 Azure 存储(特别是所有 Blob 和表)。

我是这样开始的:

import { InteractiveBrowserCredential } from '@azure/identity';
import { TableClient, TableServiceClient } from '@azure/data-tables';

const credentials = new InteractiveBrowserCredential({
  clientId: myAuthConfig.clientId,
  tenantId: myAuthConfig.tenantId,
});

const client = new TableServiceClient(
  `https://${myAuthConfig.storageAccountName}.table.core.windows.net`,
  credentials
);
client.listTables().byPage().next().then(console.log);

这完全正常! 我可以看到帐户上的所有表。 但后来我想列出一些数据的表。 所以我做了:

const client = new TableClient(
  `https://${myAuthConfig.storageAccountName}.table.core.windows.net`,
  '<table name>',
  credentials
);
client.listEntities().byPage().next().then(console.log);

但这给出了一个错误:

{
  "odata.error": {
    "code":"AuthorizationPermissionMismatch",
    "message": {
      "lang":"en-US",
      "value":"This request is not authorized to perform this operation using this permission.\nRequestId:<uuid>\nTime:2021-10-28T18:04:00.0737419Z"
    }
  }
}

我对这个错误感到非常困惑。 据我所知,我所做的一切都是正确的。 我遵循了每个教程。 我已经为我的应用程序设置了活动目录权限以使用存储 API,我的 Microsoft 帐户有权访问表,启用了 OCRS 等。

在此处输入图片说明

我不知道为什么我可以看到一张桌子,但看不到里面有什么。 我尝试使用InteractiveBrowserCredential.authenticate显式设置如下范围:

const scopes = ["User.Read"]

credentials.authenticate(scopes).then(console.log);

它适用于User.Read但我无法弄清楚存储读/写访问对应的范围。 如果我添加了"Microsoft.Storage"之类的副本,它会告诉我它不存在

以前有人遇到过这样的错误吗? 我应该在这里做什么?

谢谢@gaurav mantri,在评论中发布您的建议作为答案。

从错误来看,您的服务主体似乎无权访问您的表存储数据。 您应该使用 RBAC 角色对存储帐户资源(添加到存储帐户贡献者或读者)授予权限,如下所示。 或使用存储资源管理器授予权限。

在您的存储帐户中,请检查您是否按照@gaurav mantri 的评论分配了存储表数据贡献者/存储表数据读取者角色

在此处输入图片说明

如果没有,您可以将它们添加到您的存储帐户 > IAM > 添加角色分配,并添加特殊权限

在此处输入图片说明

如果已分配角色,则问题可能是由于存储帐户受防火墙保护。 请尝试在您的存储帐户的防火墙和虚拟网络中进行配置,以添加现有的虚拟网络或创建新的 vnet。如果没有问题,您可以允许从所有网络进行访问。

参考:

  1. 使用 Active Directory 授权访问表 - Azure 存储 | 微软文档
  2. 分配 Azure 角色以使用 powershell 访问表数据 - Azure 存储 | 微软文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM