java - Azure 存储服务 REST API : Create Lease

标签 java rest azure azure-storage azure-blob-storage

调用创建容器时出现以下错误。

响应代码:403 响应消息:服务器无法验证请求。确保授权 header 的值格式正确,包括签名。

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");

最佳答案

我们需要按 header 名称的字典顺序对 x-ms-* header 进行升序排序。而且您最后还错过了重新输入。

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。然后您就可以享受快速调试了。

关于java - Azure 存储服务 REST API : Create Lease,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100823/

相关文章:

rest - Jersey 的 RestFul API 的 2 足 OAuth 安全性

javascript - 如何确保 hibernate 版本号在 javascript 客户端中保持不可变?

java - 如何将 REST 请求转发到另一个资源?

Azure Redis 缓存授权 header

azure - 与 Azure Cosmos DB 的 Java 无密码连接的构建问题

java - 线条未绘制到 JPanel

Java 表示法 - Printed.<String, String>toSysOut().withLabel ("source-stream")

java - 条件、子查询、分组依据和更多

java - 无法正确定义处理程序方法来关闭主程序框架和对话框弹出窗口

mysql - Azure 多容器 Web 应用程序明显无缘无故地停止了该站点