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

Azure Function配置Entra认证后,用户令牌访问Blob Storage失败求助

解决方案

1. 调整Azure Function的Entra认证配置,指定正确令牌范围

你的Function使用v2版本认证,无法通过additionalLoginParams配置,需通过以下方式修正令牌受众:

  • 在Function的Entra认证设置中,添加https://storage.azure.com至允许的令牌受众列表
  • 调整用户登录的授权请求,显式指定Storage的权限范围:
    https://login.microsoftonline.com/<租户ID>/oauth2/v2.0/authorize?
    client_id=<你的Function应用客户端ID>
    &response_type=id_token+token
    &redirect_uri=<Function的回调URI>
    &scope=openid https://storage.azure.com/user_impersonation
    &response_mode=fragment
    
    此处https://storage.azure.com/user_impersonation是Storage的用户模拟权限,确保生成的令牌aud字段指向https://storage.azure.com。

2. 在Function中获取有效Storage令牌

方式一:使用On-Behalf-Of(OBO)流程转换令牌

利用用户已完成的认证,通过OBO流程向Entra ID请求针对Storage的令牌:

using Microsoft.Identity.Client;

var tokenAcquisition = new TokenAcquisition();
var storageToken = await tokenAcquisition.GetAccessTokenOnBehalfOfUserAsync(
    new[] { "https://storage.azure.com/user_impersonation" },
    req.Headers["Authorization"].ToString().Replace("Bearer ", "")
);
// 使用storageToken调用Storage API

需提前在应用注册中为Storage的user_impersonation权限授予管理员同意。

方式二:直接修改Function认证流程获取目标令牌

在Function的Entra认证高级设置中,添加登录参数(支持v2版本):

"loginParameters": ["scope=https://storage.azure.com/user_impersonation openid profile"]

用户登录后,x-ms-token-aad-access-token返回的令牌aud将自动指向https://storage.azure.com。

3. 验证令牌有效性

通过JWT.IO解码令牌,确认两个关键字段:

  • aud值为https://storage.azure.com
  • scp字段包含user_impersonation
    符合要求的令牌可被Storage API正常验证。

4. 浏览器直接查看Blob的实现方案

Function获取有效Storage令牌后,可通过前端请求展示图片:

fetch('https://<存储账户名>.blob.core.windows.net/<容器名>/<Blob路径>', {
    headers: {
        'Authorization': 'Bearer ' + storageAccessToken
    }
}).then(response => response.blob())
  .then(blob => {
      const imgUrl = URL.createObjectURL(blob);
      document.getElementById('image-container').src = imgUrl;
  });

内容的提问来源于stack exchange,提问作者Duncan King

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:01:22