2016-10-08 5 views
0

Я пытаюсь создать ссылку на общий доступ на уровне аккаунта, чтобы мой клиент мог получить доступ ко всем контейнерам в учетной записи хранилища. Я следую этим документам Account SAS. Это кажется достаточно прямым, но я продолжаю получать следующее сообщение об ошибке:Azure Account Shared Access Signiture

«Подпись не соответствует. Строка для обозначения использовала имя учетной записи \ nrl \ nb \ nsc \ n \ n2016-10-09 \ n \ n \ n2015 -04-05 \ п».

Мои параметры идентичны, поэтому я подозреваю, что это имеет какое-то отношение к тому, как я смешиваю строку для подписи. Ниже я расскажу, как я создаю токен.

var crypto = require('crypto'); 
var accountName = 'accountname'; 
var accountKey = 'tH37FTlG3TUT86caMrt2y5kOzof8nFqqA6spzg6r7HPRojE1zDiLJD/xE4oLFDh4RNqAmymvlV7fm8W4SF8cJg=='; 

var signedPermissions = "sp=rl"; 
var signedServcies = "ss=b"; 
var signedResourceType = "srt=sc"; 
var signedExpiry = "se=2016-10-09"; 
var signedVersion = "sv=2015-04-05"; 

var stringToSign = accountName + "\n" + signedPermissions + "\n" + signedServcies + "\n" + signedResourceType + "\n" + signedExpiry + "\n" + signedVersion + "\n"; 
var hmacsha256 = crypto.createHmac('sha256', accountKey).update(stringToSign).digest('base64'); 
var token = signedPermissions + "&" + signedServcies + "&" + signedResourceType + "&" + signedExpiry + "&" + signedVersion + "&sig=" + hmacsha256; 

Я также пробовал использовать крипто-js, но безрезультатно. Конечный URL, используемый для доступа к блобы в контейнере ...

«https://accountname.blob.core.windows.net/containername/blobName?srt=sc&se=2016-10-09&api-version=2015-04-05&sp=rl&ss=b&sv=2015-04-05&sig=IFD2wyfRAsHGU5IFg3RbwSJW6tRE0m0%2FxgAYvJ%2FmnEk%3D»

Я пытался в течение нескольких дней и действительно хотел бы знать, что я делаю неправильно. Благодарю.

+0

Если бы это был фактический ключ вашего счета, то я хотел бы предложить, чтобы изменить его немедленно вызвать кто-нибудь с этим ключом будет иметь возможность получить доступ к учетной записи –

ответ

0

Пожалуйста, попробуйте следующее (код бесстыдно взятый из Azure Storage Node.js library):

var hmacsha256 = crypto.createHmac('sha256', new Buffer(accountKey, 'base64')).update(stringToSign, 'utf-8').digest('base64'); 
+0

Спасибо Gaurav, но я все еще получаю ту же ошибку. – Benzene

+0

Еще одна вещь, которую я заметил, это то, что вы не включаете все параметры в свой 'stringToSign' (например,' signedstart'). Если вы не используете этот параметр, укажите для этого '\ n'. –

+0

Я изменил его на _var stringToSign = accountName + "\ n" + signedPermissions + "\ n" + signedServcies + "\ n" + signedResourceType + "\ n \ n" + signedExpiry + "\ n \ n \ n" + signedVersion + "\ n"; _ Но, к сожалению, я все равно получаю ту же ошибку. – Benzene

1

Бензол, для stringToSign, значение должно НЕ имеет имя параметра?

var signedPermissions = "rl"; var signedServcies = "b"; var signedResourceType = "sc"; var signedExpiry = "2016-10-09"; var signedVersion = "2015-04-05";

+0

И комментарий Гаурава также действителен. Вы должны также включать все параметры, как то, что вы пробовали раньше. –