Я хочу протестировать API службы хранения Azure с помощью Postman. Для этого мне нужен общий ключ, который я должен кодировать раньше. Моя проблема в том, что когда я пытаюсь выполнить GET-запрос, я получаю сообщение об ошибке. Я выполнил шаги, указанные в официальной документации Microsoft: https://docs.microsoft.com/de-de/rest/api/storageservices/authorize-with-shared-key#constructing -the-canonicalized-headers-string
Это это мой код процесса кодирования:
public static String account ="ACCOUNT NAME";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE , dd MMM yyyy HH:mm:ss O");
String date = formatter.format(ZonedDateTime.now(ZoneOffset.UTC));
String stringToSign = "GET\n"
+ "\n" // content encoding
+ "\n" // content language
+ "\n" // content length
+ "\n" // content md5
+ "\n" // content type
+ date +"\n" // date
+ "\n" // if modified since
+ "\n" // if match
+ "\n" // if none match
+ "\n" // if unmodified since
+ "\n" // range
+ "x-ms-date:" + date
+ "\nx-ms-version:2019-07-07\n"
+ "/" + account + "/"
+"\ncomp:list"; // resources
public DirectoryController() throws Exception {
try {
String auth = getAuthenticationString(stringToSign);
System.out.println(auth + date);
}catch (Exception ex) {
throw new Exception();
}
}
private static String getAuthenticationString(String stringToSign) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
String key = "KEY";
mac.init(new SecretKeySpec(Base64.decode(key), "HmacSHA256"));
String authKey = new String(Base64.encode(mac.doFinal(stringToSign.getBytes("UTF-8"))));
String auth = "SharedKey " + account + ":" + authKey;
return auth;
}
GET Request; https://ACCOTUNAME.file.core.windows.net/?comp=list
Я неправильно установил что-то в процессе кодирования. Я обнаружил, что формат даты не похож на ожидаемый Microsoft. Я получаю о. как день недели а майкрософт хочет пт .. как это получить?