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

使用SAS令牌通过上传链接在Azurite上传文件时遭遇403错误

排查Azurite上传文件403错误的核心问题

1. SAS令牌绑定的Blob名称不匹配

你生成SAS时指定的blob_name="myblob",但实际要上传的目标Blob是device.log——SAS令牌是和具体Blob名称绑定的,名称不匹配会直接触发403权限拒绝。

修改generate_blob_sas中的blob_name参数,与目标Blob保持一致:

sas_token = generate_blob_sas(
    account_name="devstoreaccount1",
    account_key="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
    container_name=container_name,
    blob_name=blob_name,  # 替换为目标Blob变量
    permission=BlobSasPermissions(create=True),
    expiry=datetime.utcnow() + timedelta(hours=1),
)

2. 连接字符串与SAS账户信息不一致

连接字符串中AccountName=myaccount,但生成SAS时用的是Azurite默认账户名devstoreaccount1,身份验证主体不匹配会导致权限校验失败。同时连接字符串中缺失AccountKey,需要补全为Azurite默认密钥:

connect_str = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;"

3. 权限范围不足

如果目标Blob已存在,仅create权限无法覆盖上传,需要补充write权限:

permission=BlobSasPermissions(create=True, write=True),

4. 请求头优化

手动设置的Content-Length可能因计算错误导致校验失败,可去掉该字段让requests自动处理:

headers = {
    "x-ms-blob-type": "BlockBlob",
    "Content-Type": "application/octet-stream",
}

response = requests.put(upload_url, data=file_contents, headers=headers)

额外验证步骤

  • 确认Azurite服务正在运行,且files容器已提前创建
  • 打印生成的SAS令牌,检查sr=b(Blob级SAS)、sp权限字段(如cw对应create+write)、se过期时间是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:45:35