Azure Blob跨存储账户预签名URL拷贝请求问题求助
Azure Blob跨存储账户复制(SAS方式)正确请求配置
以下是针对问题的具体解决方案和正确请求格式:
目标URL带SAS时,无需Authorization头
如果目标Blob的URL已经包含有效的SAS令牌,直接使用这个URL发起PUT请求即可,不要额外设置Authorization头——SAS本身已经包含了授权信息,额外的Authorization头会导致冲突。源URL必须包含带读取权限的SAS
x-ms-copy-source的值必须是完整的源Blob URL,且附带的SAS令牌必须拥有读取权限(r),否则无法读取源Blob内容。不需要设置x-ms-copy-source-authorization头,这个头仅适用于源存储不是Azure Blob的场景,Azure内部跨账户复制直接通过URL里的SAS授权即可。必要请求头规范
x-ms-date:必须是当前UTC时间,格式严格遵循YYYY-MM-DDTHH:MM:SSZ,确保和服务器时间偏差不超过15分钟。x-ms-version:必须与目标SAS令牌使用的API版本一致,或使用目标存储账户支持的最新稳定版本。x-ms-requires-sync: "true":保持这个配置,确保复制操作同步完成(成功返回201 Created)。
正确请求示例(目标URL带SAS)
PUT https://target-account.blob.core.windows.net/target-container/target-blob?sv=2022-11-02&ss=b&srt=o&sp=wac&se=2023-12-31T23:59:59Z&st=2023-01-01T00:00:00Z&spr=https&sig=xxx x-ms-copy-source: "https://source-account.blob.core.windows.net/source-container/source-blob?sv=2022-11-02&ss=b&srt=o&sp=r&se=2023-12-31T23:59:59Z&st=2023-01-01T00:00:00Z&spr=https&sig=yyy" x-ms-requires-sync: "true" x-ms-date: 2023-01-03T17:27:02Z x-ms-version: 2022-11-02 请求体为空
排查关键点
- 验证源SAS权限:确认包含
r(读取)权限,否则无法拉取源Blob。 - 验证目标SAS权限:确认包含
w(写入)和c(创建)权限,否则无法创建目标Blob。 - 避免SAS令牌编码:直接使用生成的原始SAS字符串,不要做URL编码或解码操作,否则令牌会失效。
- 时间同步:确保本地系统时间与UTC时间偏差在15分钟内,否则会触发授权失败。
内容的提问来源于stack exchange,提问作者giangig
相关产品推荐
相关产品推荐

