使用 Azure SAS 令牌的放心请求总是 returns 403

Rest-assured request using Azure SAS token always returns 403

我正在使用 azure-cli 生成 SAS 令牌

az storage blob generate-sas --account-key mykey --account-name myaccount --container-name my --expiry 2023-01-01T00:00:00Z --name 0.0.1/uk/787867898767/structure/calendar/a12calendar.json --permissions r

其中 returns 一个 SAS 令牌如下所示:

se=2023-01-01T00%3A00%3A00Z&sp=r&sv=2020-02-10&sr=b&sig=u2VWd2i8cdYhkjA%2BZRBCYZbHwmZDCrjirs%2BYstwxmjI%3D

我有一个放心的测试,它执行 GET 到

given().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%3DD").then().statusCode(200)

失败并显示 HTTP 403。

    <?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:5ab15b27-701e-00b3-298c-b0ffa0000000
Time:2021-09-23T15:08:56.1619254Z</Message><AuthenticationErrorDetail>Signature fields not well formed.</AuthenticationErrorDetail></Error>

但是相同的 url 在 Postman 和 Chrome 上运行良好。看起来像是某种编码问题,但找不到什么。任何帮助将不胜感激。

好的,问题出在默认的 RestAssured 设置上。

RestAssured 默认有 urlEncodingEnabled = true

使用

将其设置为 false
RestAssured.urlEncodingEnabled = false;

如果您遇到 url 编码问题。