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

使用Azure.Storage.Blob v12.9.0上传Azure Blob Storage时认证失败求助

问题原因
  • 新存储账户的安全策略限制:当前Azure新创建的存储账户会默认开启「禁止共享密钥访问」的安全配置,该配置会直接拦截所有使用存储账户密钥(StorageSharedKeyCredential)发起的请求,返回400 InvalidAuthenticationInfo错误。
  • 代码构造逻辑存在冗余隐患:你在构造BlobServiceClient时,先通过连接字符串生成客户端提取Uri,再搭配单独配置的账号、密钥生成的StorageSharedKeyCredential重新构造客户端,一旦配置中连接字符串的密钥和单独配置的密钥不一致,就会导致认证头信息错误。
解决步骤

1. 调整存储账户安全配置

进入Azure门户找到对应存储账户,在左侧菜单「设置」→「配置」页面,找到「允许存储账户密钥访问」选项,将其设置为启用,保存后等待2分钟左右生效再重试。
如果你有安全要求必须禁用共享密钥访问,则需要改用Azure AD托管身份、预生成SAS令牌的方式完成认证,不能继续使用StorageSharedKeyCredential。

2. 优化客户端构造逻辑

删除冗余的双层构造逻辑,两种构造方式二选一即可,你需要生成SAS令牌的场景下,直接用Uri+共享密钥的方式构造即可,避免配置冲突:

public AzureStorageService(IOptions<AzureStorageSettings> options)
{
    _containerName = options.Value.ImageContainer;
    _sasCredential = new StorageSharedKeyCredential(options.Value.AccountName, options.Value.Key);
    // 直接构造BlobServiceClient,无需通过连接字符串二次解析
    _blobServiceClient = new BlobServiceClient(
        new Uri($"https://{options.Value.AccountName}.blob.core.windows.net"),
        _sasCredential);
    _containerClient = _blobServiceClient.GetBlobContainerClient(_containerName);
}

3. 核对配置一致性

检查配置文件中ConnectionString字段里的AccountName、AccountKey,和单独配置的AccountName、Key参数完全匹配,确认复制密钥时没有多余空格、遗漏字符的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:06:03