Azure存储服务器自动在get blob操作中包含x-ms-request-id标头

问题描述

我正在尝试列出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 (将#修改为@)