Azure存储服务REST API:创建租约

问题描述 投票:0回答:1

在调用Create Container时获得以下错误。

响应代码:403响应消息:服务器无法验证请求。确保正确形成Authorization标头的值,包括签名。

String stringToSign = "PUT\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:" + date + "\nx-ms-version:" + "2018-03-28\nx-ms-lease-action:acquire\nx-ms-lease-duration:1\nx-ms-proposed-lease-id:1f812371-a41d-49e6-b123-f4b542e851c5\n" + "/" + storageAccount + "/"+ "container-lease-test"+"\ncomp:lease";

Java代码段

HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
connection.setRequestMethod(vMethod);
connection.addRequestProperty("Authorization", authHeader);
connection.addRequestProperty("x-ms-date", date);
connection.addRequestProperty("x-ms-version", "2018-03-28");
connection.setDoOutput(true);
connection.setFixedLengthStreamingMode(0);

//Create Lease
connection.addRequestProperty("x-ms-lease-action", "acquire");
connection.addRequestProperty("x-ms-lease-duration","1");
connection.addRequestProperty("x-ms-proposed-lease-id","1f812371-a41d-49e6-b123-f4b542e851c5");
java rest azure azure-storage azure-storage-blobs
1个回答
1
投票

我们需要按字母顺序按字典顺序对x-ms- *标题按升序排序。而且你最后错过了改造。

String stringToSign = "PUT\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:" + date + "\nx-ms-lease-action:acquire\nx-ms-lease-duration:15\nx-ms-proposed-lease-id:1f812371-a41d-49e6-b123-f4b542e851c5\nx-ms-version:2018-03-28\n/" + storageAccount + "/container-lease-test\ncomp:lease\nrestype:container";

此外,x-ms-lease-duration应为15~60或-1(无限)。

我建议你按照docs并使用Fiddler来捕获流量,如果你收到403错误,你可以看到预期的stringtosign。然后你可以享受快速调试。

© www.soinside.com 2019 - 2024. All rights reserved.