问题描述
我正在尝试列出blob操作,然后再执行get blob操作。列表blob可以很好地工作,但是要获取blob时,服务器自动将x-ms-request-id包含在标头字符串中,导致计算出的字符串不匹配。 错误如下:
在HTTP请求中找到的MAC签名与任何计算出的签名都不相同。服务器使用以下字符串签名:'GET 有没有办法阻止服务器自动包括x-ms-request-id? 包com.azure;
//import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;
//import java.util.Calendar;
//import java.util.TimeZone;
//import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
//import java.text.DateFormat;
public class Util {
// static SimpleDateFormat fmt = new SimpleDateFormat("EEE,dd MMM yyyy HH:mm:ss");
// static Date Now= new Date();
// static String strDate = fmt.format(Now);
public static void main(String[] args) {
// Todo Auto-generated method stub
}
public static String signGetBlobRequestSK(String request,String account,String key,String Now) throws Exception
{
//static SimpleDateFormat fmt = new SimpleDateFormat("EEE,dd MMM yyyy HH:mm:ss");
//fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
//String date = fmt.format(Calendar.getInstance().getTime()) + " GMT";
String signedStr = Util.unsignedGetBlobRequestSK(account,Now);
Mac mac = Mac.getInstance("HmacSHA256");
Decoder decoder = Base64.getDecoder();
Encoder encoder = Base64.getEncoder();
mac.init(new SecretKeySpec(decoder.decode(key),"HmacSHA256"));
String authKey = new String(encoder.encode(mac.doFinal(signedStr.getBytes("UTF-8"))));
//Byte authKeyDecoded = Byte.decode(authKey);
String auth = "SharedKey " + account + ":" + authKey;
return auth;
}
public static String unsignedGetBlobRequestSK(String account,String Now) throws Exception
{
//fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
// String currentTimestamp = fmt.format(Now) + " GMT";
StringBuilder sb = new StringBuilder();
sb.append("GET\n"); // method
sb.append('\n'); // content encoding
sb.append('\n'); // content language
sb.append('\n'); // content length
sb.append('\n'); // md5 (optional)
sb.append('\n'); // content type
sb.append('\n'); // legacy date
sb.append('\n'); // if-modified-since
sb.append('\n'); // if-match
sb.append('\n'); // if-none-match
sb.append('\n'); // if-unmodified-since
sb.append('\n'); // range
sb.append("x-ms-date:" + Now +'\n'); // headers
sb.append("x-ms-version:2019-12-12\n");
sb.append("/" + account + '/'+ "test" + "/Test%20File%20for%20GMS.xml");
return sb.toString();
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)