簡體   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