使用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
相关产品推荐
相关产品推荐

