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

使用Rest-assured携带Azure SAS令牌请求始终返回403错误如何解决

根因分析

RestAssured默认开启URL自动编码逻辑,你传入的完整URL中已经包含了URL编码后的SAS参数(比如%2B对应加号、%3D对应等号),RestAssured会对这些已经编码的字符做二次转义,将%转义为%25,最终传递到Azure的签名参数和生成的SAS不一致,因此返回403签名错误。Chrome和Postman默认不会对已符合URL规范的参数二次编码,所以可以正常访问。

解决方案

方案1:关闭RestAssured自动URL编码

在请求前添加urlEncodingEnabled(false)配置即可,代码示例:

given()
    .urlEncodingEnabled(false)
.get("https://myaccount.blob.core.windows.net/mycontainer/0.0.1/uk/787867898767/structure/calendar/a12calendar.json?se=2023-01-01T00%3A00%3A00Z&sp=r&sv=2020-02-10&sr=b&sig=u2VWd2i8cdYhkjA%2BZRBCYZbHwmZDCrjirs%2BYstwxmjI%3D")
.then()
    .statusCode(200);

方案2:拆分参数交由RestAssured统一编码

先将SAS各参数解码为原始值,再通过queryParam逐个传递,RestAssured会自动完成编码,避免二次转义问题:

given()
    .queryParam("se", "2023-01-01T00:00:00Z")
    .queryParam("sp", "r")
    .queryParam("sv", "2020-02-10")
    .queryParam("sr", "b")
    .queryParam("sig", "u2VWd2i8cdYhkjA+ZRBCYZbHwmZDCrjirs+YstwxmjI=")
.get("https://myaccount.blob.core.windows.net/mycontainer/0.0.1/uk/787867898767/structure/calendar/a12calendar.json")
.then()
    .statusCode(200);

方案3:传入URI对象而非字符串URL

用java.net.URI构造完整访问地址后传入请求方法,RestAssured不会对URI对象做二次编码:

import java.net.URI;

// 构造已编码的URI对象
URI blobUri = new URI("https://myaccount.blob.core.windows.net/mycontainer/0.0.1/uk/787867898767/structure/calendar/a12calendar.json?se=2023-01-01T00%3A00%3A00Z&sp=r&sv=2020-02-10&sr=b&sig=u2VWd2i8cdYhkjA%2BZRBCYZbHwmZDCrjirs%2BYstwxmjI%3D");

given()
    .get(blobUri)
.then()
    .statusCode(200);
额外注意

你提供的测试代码中SAS的sig末尾多了一个额外的D字符(生成的SAS sig结尾是%3D,测试代码里是%3DD),复制SAS令牌时注意不要多拼接无关字符,否则也会导致签名校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:06:01