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

本地Azure Function已登录仍无法获取令牌,无法读取Blob存储

解决本地Azure函数使用DefaultAzureCredential访问Blob存储的认证问题

问题分析

你遇到的DefaultAzureCredential认证失败,核心原因是本地函数进程无法通过AzureCliCredential获取已登录的Azure CLI会话信息,导致所有内置认证方式均失效。以下是针对性的修复步骤:

修复步骤

1. 确保函数进程继承Azure CLI会话

本地运行Azure函数时,VS Code的运行按钮可能无法继承终端的CLI会话,需按以下操作:

  • 关闭当前VS Code终端,重新打开一个新终端
  • 在新终端中执行az login,确认登录账户为已分配Storage Account Contributor角色的账户
  • 直接在该终端中用func start命令启动函数,而非通过VS Code的运行按钮

2. 显式指定AzureCliCredential替代DefaultAzureCredential

修改代码,直接使用AzureCliCredential避免自动认证链的不确定性:

import azure.functions as func
from azure.storage.blob import BlobServiceClient
from azure.identity import AzureCliCredential

def main(req=None) -> func.HttpResponse:
    account_url = "https://<name>.blob.core.windows.net"
    # 直接使用Azure CLI登录的凭证
    credential = AzureCliCredential()
    blob_service_client = BlobServiceClient(account_url, credential=credential)
    container_client = blob_service_client.get_container_client('<name>')

    blob_list = container_client.list_blobs()
    # 返回所有Blob名称,而非仅第一个
    blob_names = "\n".join([b.name for b in blob_list])
    return func.HttpResponse(f'容器中的Blob列表:\n{blob_names}')

3. 验证并切换到正确的Azure订阅

在终端执行以下命令,确认当前登录账户的订阅信息:

az account show

如果输出的订阅不是目标存储账户所在的订阅,执行切换命令:

az account set --subscription <目标订阅ID>

4. 确认VS Code Azure扩展已登录正确账户

打开VS Code左侧的Azure面板,确认顶部显示的账户与终端az login的账户一致,避免扩展与终端账户不一致导致的会话隔离问题。

内容的提问来源于stack exchange,提问作者Brian Barry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:18