亚马逊S3V4验签与MINIO验签区别

2023-12-13 14:51:38

1、先看下官方文档

AWS S3V4 DEMO

2、实际调用试试

1)代码

// 计算auth
        // for a simple GET, we have no body so supply the precomputed 'empty' hash
        Map<String, String> headers = new HashMap<String, String>();
        headers.put("x-amz-content-sha256", AWS4SignerBase.EMPTY_BODY_SHA256);
        headers.put("x-amz-date","20231212T013128Z");

        // 如果是putObject,并且只有minio才多计算
        String md5Hash = Digest.ZERO_MD5_HASH;
        headers.put("Content-MD5",md5Hash);



        URL endpointUrl = new URL("http://192.168.21.61:9000/aaa/client_1/20231201/2023120110242247663528991.jpg");
        String regionName = "us-east-1";
        AWS4SignerForAuthorizationHeader signer = new AWS4SignerForAuthorizationHeader(
                endpointUrl, "GET", "s3", regionName);
        String authorization = signer.computeSignature(headers,
                null, // no query parameters
                AWS4SignerBase.EMPTY_BODY_SHA256,
                "aaa",
                "aaa@12345");
        log.info("authorization={}",authorization);

        // place the computed signature into a formatted 'Authorization' header
        // and call S3
        headers.put("Authorization", authorization);

2)需要微调的地方

3、与MINIO不同的地方

minio调用流程,以getObject为例子

io.minio.MinioClient#getObject ->

io.minio.MinioAsyncClient#getObject ->

io.minio.S3Base#executeAsync(io.minio.http.Method, io.minio.BaseArgs, com.google.common.collect.Multimap<java.lang.String,java.lang.String>, com.google.common.collect.Multimap<java.lang.String,java.lang.String>, java.lang.Object, int) ->

io.minio.S3Base#executeAsync(io.minio.http.Method, java.lang.String, java.lang.String, java.lang.String, okhttp3.Headers, com.google.common.collect.Multimap<java.lang.String,java.lang.String>, java.lang.Object, int) ->

重点

分别设置头信息与签名

与AWS官方demo不同,里面会对header中的Content-MD5单独做个计算。

如果想要计算拉通,需要手动对其单独计算一下。

文章来源:https://blog.csdn.net/pengbin790000/article/details/134944182
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。