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

Java生成Azure Storage SAS Token及上传认证失败问题求助

问题:Azure Storage SAS Token生成失败导致上传AuthenticationFailed错误

业务需求

  • 客户端通过gRPC发送GetMediaUploadCredRequest请求,携带媒体类型、扩展名等信息
  • 服务端返回GetMediaUploadCredResponse,包含上传URL、HTTP头和媒体ID
  • 客户端通过PUT请求完成文件上传

遇到的问题

先后尝试4种Java实现方式,均触发AuthenticationFailed错误,各版本情况如下:

  • 版本1:SDK生成的SAS Token仅为参数串,非完整URL,导致认证失败
  • 版本2:手动构造签名,错误提示:Signature did not match
  • 版本3:按文档构造签名,错误提示:Signature fields not well formed
  • 版本4:用SDK生成完整URL,仍提示认证失败

排查关键点建议

  1. 权限与资源范围检查

    • 确认SAS Token的权限是否包含Write或Create(PUT上传必须)
    • 验证SAS的资源类型是否正确:针对单个Blob需指定b(Blob),而非容器级别的c
    • 检查Token有效期,避免生成时已过期或有效期过短
  2. 签名构造细节核对

    • 手动构造签名时,严格遵循Azure的签名字符串格式:
      StringToSign = account-name + "\n" +
                     signedpermissions + "\n" +
                     signedresource + "\n" +
                     signedstart + "\n" +
                     signedexpiry + "\n" +
                     signedip + "\n" +
                     signedprotocol + "\n" +
                     signedversion + "\n" +
                     rscc + "\n" +
                     rscd + "\n" +
                     rsce + "\n" +
                     rscl + "\n" +
                     rsct
      
    • 注意参数大小写敏感:比如权限用小写w表示写,协议需和客户端请求一致(http/https)
  3. SDK使用正确性验证

    • 确认使用的Azure Storage SDK为最新稳定版,规避旧版本bug
    • 生成完整URL时,检查容器名、Blob名是否正确,SAS Token拼接格式应为https://<account>.blob.core.windows.net/<container>/<blob>?<sas-token>
    • 验证存储账户密钥的正确性,避免主副密钥混淆
  4. 客户端请求匹配检查

    • 客户端PUT请求的URL需与服务端生成的完全一致,包括Blob名称、参数顺序
    • 检查客户端请求头是否与SAS配置兼容:若生成SAS时指定了响应头规则,避免请求头冲突
    • 确认客户端IP在SAS的允许IP范围内(若设置了signedip)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:57:14