Azure Storage API - Как работает авторизация с общим ключом? - PullRequest
0 голосов
/ 19 июня 2020

Я хочу протестировать 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. Я получаю о. как день недели а майкрософт хочет пт .. как это получить?

1 Ответ

0 голосов
/ 20 июня 2020

Хорошо, мы можем закрыть эту тему. Я решил проблему. Это был неправильный формат даты. С Local.US и без аргумента даты перед // датой он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...