公式ドキュメント : Create an account SAS
BLOB オブジェクト を 30秒 だけ Read 可能なURL
constcrypto=require('crypto');functiontruncateIsoDate(date){returndate.toISOString().substring(0,19)+'Z';}constgetURL=(account,container,blob)=>{consturl=`https://${account.name}.blob.core.windows.net/${container}/${blob}`;constSTORAGE_ACCOUNT_NAME=account.name;constACCOUNT_ACCESS_KEY=account.key;constnow=newDate().getTime();conststart=newDate(now-5*60*1000);// 5秒前(時計のズレ考慮)constend=newDate(now+30*60*1000);// 30秒間constsignedpermissions='r';constsignedversion='2018-03-28';constsignedservice='b';constsignedresourcetype='o';constsignedstart=truncateIsoDate(start);constsignedexpiry=truncateIsoDate(end);// const signedpermissions = 'rwdlac';// const signedresourcetype = 'sco';// const signedIP = '0.0.0.0/0';// const signedProtocol = 'https';// 順番は厳守conststringToSign=[STORAGE_ACCOUNT_NAME,signedpermissions,signedservice,signedresourcetype,signedstart,signedexpiry,'',// signedIP ,'',// signedProtocol,signedversion,'',// (末尾の改行必須)].join('\n');constkey=Buffer.from(ACCOUNT_ACCESS_KEY,'base64');consthmac=crypto.createHmac('sha256',key);constsig=hmac.update(stringToSign,'utf8').digest('base64');// 順番はフリーconstsas=[`sp=${signedpermissions}`,`ss=${signedservice}`,`srt=${signedresourcetype}`,`st=${signedstart}`,`se=${signedexpiry}`,// `sip=${signedIP}`,// `spr=${signedProtocol}`,`sv=${signedversion}`,`sig=${encodeURIComponent(sig)}`,].join('&');return[url,sas].join('?');};constaccount={name:'ストレージアカウント名',key:'キー ...==',};consturl=getURL(account,'コンテナ名','ブロブ名');console.log(url);
シグネチャーに container や blob の情報が含まれないから、この SAS トークンは全部のオブジェクトで共通、ということですね。