Попытка создать токен SAS для доступа к определенным файлам в учетной записи хранения. Я использую перечисленные здесь методы:
https://docs.microsoft.com/en-us/rest/api/eventhub/generate-sas-token
Теперь у меня проблема в том, что я не могу, хоть убей, заставить работать строку sasToken. Если я сгенерирую токен через портал (подпись общего доступа в учетной записи хранения), я могу получить доступ к этим файлам через URL-адрес с предоставленным токеном.
Однако мне еще предстоит сгенерировать токен SAS программно через Java, используя методы, которые я привел выше. Я думаю, что моя проблема - это StringToSign, который шифруется. Я следовал этому примеру при построении строки для шифрования:
https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas
Все мои усилия привели к:
<AuthenticationErrorDetail>Signature fields not well formed.</AuthenticationErrorDetail>
or
<AuthenticationErrorDetail>Signature did not match. String to sign used was <insert string details here>
Глядя на сгенерированный порталом sasToken, который у меня работает:
? sv = 09.11.2017 & ss = f & srt = o & sp = r & se = 2018-12-06T22: 15: 20Z & st = 2018-12-06T14: 15: 20Z & spr = https & sig =% 2Bi1TWv5D80U% 2BoaIeoBh1wjaO1p4xVFx4zwiszt% 2F
Кажется, мне нужна такая строка:
String stringToSign = accountName + "\n" +
"r\n" +
"f\n" +
"o\n" +
URLEncoder.encode(start, "UTF-8") + "\n" +
URLEncoder.encode(expiry, "UTF-8") + "\n" +
"\n" +
"https\n" +
azureApiVersion;
Где accountName - это имя учетной записи хранения из Azure, а start / expiry - строки начала и окончания срока действия (т.е. 2018-12-06T22: 15: 20Z), а azureApiVersion - «2017-11-09».
Затем я пытаюсь вернуть токен после построения строки следующим образом:
String signature = getHMAC256(key, stringToSign);
sasToken = "sv=" + azureApiVersion +
"&ss=f" +
"&srt=o" +
"&sp=r" +
"&se=" +URLEncoder.encode(expiry, "UTF-8") +
"&st=" + URLEncoder.encode(start, "UTF-8") +
"&spr=https" +
"&sig=" + URLEncoder.encode(signature, "UTF-8");
Я пробовал кодирование URL-адресов, а не кодирование URL-адресов дат начала / истечения срока действия, на всякий случай, когда это все испортило. Что мне не хватает?
stringToSign
: docs.microsoft.com/en-us/rest/api/storageservices/ 31.05.2019