You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Entra ID与MSAL.NET在Blazor浏览器无密钥访问Azure存储资源

无密钥通过浏览器使用Entra ID访问Azure Blob存储方案

前提条件

  • 拥有Azure订阅,具备Entra ID应用注册和存储账户配置权限
  • 已注册Entra ID单页应用(SPA)——浏览器环境仅支持该类型应用注册
  • 目标Azure Blob存储账户已启用Entra ID身份验证

配置步骤

1. 配置Entra ID SPA应用注册

  • 在Entra ID控制台创建SPA应用,设置前端应用的重定向URI(如http://localhost:3000)
  • 为应用添加API权限:找到「Azure Storage」,添加user_impersonation委托权限,完成后授予管理员同意(需让所有授权用户都能访问时操作)

2. 配置Blob存储的IAM访问控制

  • 进入目标存储账户的「访问控制(IAM)」页面,添加角色分配
  • 选择匹配需求的内置角色:如仅需读取选存储Blob数据读取者,需读写选存储Blob数据贡献者
  • 将角色分配给Entra ID中的目标用户组或单个用户(基于信任已认证用户的前提,直接分配即可)

前端实现(基于MSAL.js)

浏览器环境无法使用Azure.Identity的TokenCredentials,需用专为前端设计的MSAL.js库完成身份验证和令牌获取:

import { PublicClientApplication } from '@azure/msal-browser';

// 初始化MSAL客户端
const msalConfig = {
  auth: {
    clientId: '你的SPA应用ID',
    authority: 'https://login.microsoftonline.com/你的租户ID',
    redirectUri: '你的前端应用地址'
  }
};
const pca = new PublicClientApplication(msalConfig);

// 获取访问令牌
async function fetchAccessToken() {
  const accounts = pca.getAllAccounts();
  if (accounts.length === 0) {
    // 未登录则弹出登录窗口
    const loginRes = await pca.loginPopup({ scopes: ['https://storage.azure.com/.default'] });
    return loginRes.accessToken;
  } else {
    // 已登录则静默刷新令牌
    const tokenRes = await pca.acquireTokenSilent({
      account: accounts[0],
      scopes: ['https://storage.azure.com/.default']
    });
    return tokenRes.accessToken;
  }
}

// 调用Blob存储REST API示例:列出容器
async function listBlobContainers(storageAccount, token) {
  const res = await fetch(`https://${storageAccount}.blob.core.windows.net/?comp=list`, {
    headers: { 'Authorization': `Bearer ${token}` }
  });
  if (res.ok) {
    const containerList = await res.text();
    console.log('容器列表:', containerList);
  } else {
    console.error('请求失败:', res.status);
  }
}

// 执行示例
fetchAccessToken().then(token => {
  listBlobContainers('你的存储账户名', token);
});

关键说明

  • 为何不用Azure.Identity:该库的TokenCredentials组件多为后端/桌面应用设计,依赖客户端密钥或证书,不符合浏览器环境的无密钥要求;而MSAL.js基于OAuth2 PKCE流程,全程无需暴露敏感密钥
  • 权限管控:通过IAM直接绑定用户与Blob数据角色,确保仅授权用户可访问,完全规避SAS、连接字符串等密钥类凭证的安全风险
  • 安全边界:因前端直接访问资源,需严格遵循最小权限原则分配角色,且仅信任已认证用户的合规操作

内容的提问来源于stack exchange,提问作者Rodolfo Grave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 01:37:14