API REST службы хранилища Azure: создание аренды - PullRequest
0 голосов
/ 30 августа 2018

Получение приведенной ниже ошибки при вызове Create Container.

Код ответа: 403 Ответное сообщение: серверу не удалось аутентифицировать запрос. Убедитесь, что значение заголовка авторизации сформировано правильно, включая подпись.

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

1 Ответ

0 голосов
/ 31 августа 2018

Нам нужно отсортировать заголовки 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 (бесконечно).

Я рекомендую вам следовать документам и использовать Fiddler для перехвата трафика, вы можете увидеть ожидаемый stringtosign, если вы получите ошибку 403. Тогда вы можете наслаждаться быстрой отладкой.

...