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

Unity中从Azurite拉取文件失败,请求认证报错403

Azurite本地存储SharedKey认证403错误排查方案

针对你遇到的Unity/控制台应用访问Azurite存储报403的问题,按以下步骤排查:

1. 核对签名生成的核心规则

Azurite和云存储的签名逻辑有细节差异,重点检查:

  • 日期格式:请求头里的Date或x-ms-date必须是GMT格式(比如Thu, 02 Nov 2023 12:34:56 GMT),不能用本地时间或ISO格式
  • 签名字符串构造:严格按顺序拼接,不能遗漏或颠倒字段,格式为:
    VERB\n
    Content-Encoding\n
    Content-Language\n
    Content-Length\n
    Content-MD5\n
    Content-Type\n
    Date\n
    If-Modified-Since\n
    If-Match\n
    If-None-Match\n
    If-Unmodified-Since\n
    Range\n
    x-ms-date\n
    x-ms-version\n
    /<account-name>/<container-name>/<file-path>
    
    注意:空字段也要保留换行,比如没有Content-MD5就留空行
  • 账户名与密钥:Azurite默认账户名是devstoreaccount1,默认密钥是Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==,生成签名前要先把密钥Base64解码,再用HMAC-SHA256加密签名字符串,最后重新Base64编码得到签名值

2. 排查请求头的干扰项

  • Unity的WebClient可能自动添加额外头(比如User-Agent),这些头如果不在签名字符串里,会导致认证失败。建议手动构造HttpWebRequest,精确控制所有请求头
  • 确保没有多余的x-ms-*自定义头,所有添加的x-ms-头必须按字母排序加入签名字符串

3. 启用Azurite调试日志定位问题

修改Docker Compose的Azurite启动命令,开启调试日志:

services:
  azurite:
    image: mcr.microsoft.com/azure-storage/azurite
    command: azurite --blobHost 0.0.0.0 --debug
    ports:
      - "10000:10000"

查看Docker日志(docker logs <azurite-container-id>),日志里会明确指出签名不匹配的具体原因,比如「expected signature string xxx, got yyy」,直接对比就能找到问题

4. 用SAS Token快速验证连通性

如果SharedKey认证卡壳,先绕开认证问题验证文件是否可访问:

  • 在Azure Storage Explorer里选中目标OBJ文件,右键生成SAS Token,勾选「读」权限
  • 把SAS Token拼在文件URL后(比如http://localhost:10000/devstoreaccount1/mycontainer/model.obj?sv=2022-11-02&ss=b&srt=o&sp=r&se=2023-11-03T12:00:00Z&st=2023-11-02T04:00:00Z&spr=http&sig=xxx),直接在浏览器或Postman里访问,如果能下载文件,说明存储服务本身没问题,问题出在SharedKey签名逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:41