使用SAS令牌调用Azure Copy Blob REST API报AuthenticationFailed错误
Azure Copy Blob API调用AuthenticationFailed错误排查
问题现象
调用Azure Copy Blob API发起请求时返回AuthenticationFailed错误,服务端返回提示:
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId: aa820193-601e-0037-5959-7f7a5b000000
原始请求配置
- 请求方法:
PUT - 请求地址:
https://accountname.blob.core.windows.net/containername/SAMPLE_FILE.CSV - 请求头配置项:
Authorization:SHARED ACCESS SIGNATURE:?sv=2020-08-04&ss=bfqt&srt=sco&sp=rwdlacupitfx&se=2023-05-30T06:52:46Z&st=2022-05-31T22:52:46Z&spr=https,http&sig=lP1fdHkWabckHlMFOrUsAWyVu6zxxJwNX4l%2B6a0WAmE%3Dx-ms-version:2015-04-05x-ms-copy-source:https://accountname.blob.core.windows.net/containername/SAMPLE_FILE.CSVx-ms-date:2022-06-13T18:51:28.5001104Z
排查到的配置问题及修复方法
- Authorization头格式错误
使用SAS令牌做鉴权时,Authorization头不需要拼接SHARED ACCESS SIGNATURE:前缀,也不能保留SAS串开头的?字符。当前配置多了这两处无效内容,直接删除即可修正格式问题;更稳妥的鉴权方式是直接把完整SAS串(带开头的?)拼接在请求URL末尾,不需要单独设置Authorization头,能规避绝大多数格式类鉴权错误。 - x-ms-copy-source配置无效
Copy Blob接口的x-ms-copy-source头需要填写源端Blob的可访问地址,当前配置的源地址和目标请求URL完全一致,属于将Blob复制到自身的非法操作。如果源Blob未配置匿名公开访问,还需要给源Blob地址拼接具备读权限的有效SAS令牌,否则源端鉴权不通过也会导致请求失败。 - x-ms-date格式与API版本不兼容
当前配置的x-ms-version为2015-04-05,该版本要求x-ms-date必须使用RFC 1123格式,标准格式示例为Mon, 13 Jun 2022 18:51:28 GMT,传入的ISO 8601格式时间戳不符合旧版API的格式要求,会直接导致签名校验失败。如果需要使用ISO 8601格式的时间戳,将x-ms-version升级到2016-05-31及以上版本即可。 - SAS时间偏差校验问题
当前配置的SAS生效起始时间为2022-05-31T22:52:46Z,如果发起请求的本地设备时间与Azure服务端时间偏差超过15分钟,会直接触发鉴权失败。建议发起请求前同步本地时钟,或生成SAS时将生效起始时间往前调整5-10分钟预留时间差。
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

