我目前正在嘗試從salesforce中檢索我的Azure帳戶中可用的列表共享。我想從下面的示例代碼實現的例子:azure REST API通信
https://docs.microsoft.com/en-us/rest/api/storageservices/list-shares#samplerequestandresponse
//private key: access key of my account
string storageKey =private key;
string storageName = 'accountName';
Datetime dt = Datetime.now();
string formattedDate = dt.formatGMT('EEE, dd MMM yyyy HH:mm:ss')+ ' GMT';
system.debug('formattedDate--'+formattedDate);
string CanonicalizedHeaders = 'x-ms-date:'+formattedDate+'\nx-ms-version:2016-05-31';
string CanonicalizedResource = '/' + storageName + '/\ncomp:list';
string StringToSign = 'GET\n\n\n\n\n\n\n\n\n\n\n\n' + CanonicalizedHeaders+'\n'+CanonicalizedResource;
system.debug('StringToSign--'+StringToSign);
Blob temp = EncodingUtil.base64Decode(storageKey);
Blob hmac = Crypto.generateMac('HmacSHA256',Blob.valueOf(StringToSign),temp); //StringToSign
system.debug('oo-'+EncodingUtil.base64Encode(hmac));
HttpRequest req = new HttpRequest();
req.setMethod('GET');
//req.setHeader('content-type', 'application/xml');
req.setHeader('x-ms-version','2016-05-31');
req.setHeader('x-ms-date', formattedDate);
string signature = EncodingUtil.base64Encode(hmac);
string authHeader = 'SharedKey salesforcestrongaccount'+':'+signature;
req.setHeader('Authorization',authHeader);
req.setEndpoint('https://<accountName>.file.core.windows.net/?comp=list');
Http http = new Http();
HTTPResponse res;
res = http.send(req);
System.debug(LoggingLevel.INFO, 'http.send result status: ' + res.getStatus());
任何幫助嗎?
有你正在計算'stringToSign'的方式問題。請按照此處列出的說明進行操作:https://docs.microsoft.com/zh-cn/rest/api/storageservices/authentication-for-the-azure-storage-services並再次嘗試您的請求。 –
你能否提供任何示例代碼。因爲我嘗試了鏈接中指定的過程。按鈕運氣 – Rv1
不,你沒有按照說明那裏。我快速瀏覽了一下你的代碼,並發現了這一點。我建議你再仔細閱讀文件。否則,如果您搜索Azure存儲REST API示例,我相信您會發現充足的源代碼。 –