2016-11-10 9 views
0

Я использую SDK для java для создания SAS для доступа к блобу. Это код:Azure java: идентификатор SAS не найден для указанного подписанного идентификатора

SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy(); 
policy.setPermissionsFromString("r"); 
Calendar date = Calendar.getInstance(); 
Date expire = new Date(date.getTimeInMillis() + (expirationMinutes * 60000)); 
Date start = new Date(date.getTimeInMillis()); 
policy.setSharedAccessExpiryTime(expire); 
policy.setSharedAccessStartTime(start); 
return blob.getUri().toString()+"?"+blob.generateSharedAccessSignature(policy, externalFileName); 

Но когда я пытаюсь использовать URL для доступа к блоб я получаю эту ошибку:

<Error> 
<Code>AuthenticationFailed</Code> 
<Message> 
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:f1f169d2-0001-003f-115a-3be1d6000000 Time:2016-11-10T13:57:14.6192554Z 
</Message> 
<AuthenticationErrorDetail> 
SAS identifier cannot be found for specified signed identifier 
</AuthenticationErrorDetail> 
</Error> 

Я делаю то же самое в NET для того же сгустка полученный URL (который работает) отличается, что один я здесь:

не работает (Java):

/mycontainer/privadoPrueba/cat1.jpg?sig=FFLVk%2FPViHBZhH1JIW6wBbWiJ0%2Bgz0U8wjFzgRoytNo%3D&st=2016-11-10T13%3A55%3A06Z&se=2016-11-10T14%3A06%3A06Z&sv=2015-07-08&si=privadoPrueba%2Fcat1.jpg&sp=r&sr=b 

Works (NET):

/mycontainer/privadoPrueba/cat1.jpg?sv=2015-07-08&sr=b&sig=WyiJWltZFj1AkkzST6mo2NjBF1tRSXxrkMP5LEAGJNk%3D&st=2016-11-10T14%3A05%3A41Z&se=2016-11-10T14%3A16%3A41Z&sp=r 

Как я могу это исправить?

+0

Из двух URL-адресов SAS вы упоминали выше, вы можете сказать, какая из них работает? –

+0

Второй, я добавлю его на вопрос – moondaisy

ответ

2

Просто глядя на токен SAS, вы указываете политику с именем файла. Вероятно, это не то, что вы хотели сделать, а не в токене .NET SAS.

Проблема здесь я думаю:

blob.generateSharedAccessSignature(policy, externalFileName); 

Второй параметр, вероятно, имя политики, если API похож на .NET.

Попробуйте вместо этого:

blob.generateSharedAccessSignature(policy, null); 
+0

Спасибо, в этом была проблема. – moondaisy