You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Java SDK 2调用MinIO putObject报授权机制不支持错误如何解决?

解决AWS Java SDK 2连接MinIO时的授权机制异常问题

问题根源

MinIO强制要求使用AWS4-HMAC-SHA256签名算法进行请求验证,你的S3Client配置没明确指定签名版本,导致上传对象时签名方式不匹配——虽然列桶操作能兼容旧签名逻辑,但上传操作对签名要求更严格。

修复方案

修改S3Client的构建代码,明确指定签名算法,同时开启路径样式访问(MinIO默认采用这种访问方式):

调整后的S3Client构建代码

import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3Configuration;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.core.signing.SigningAlgorithm;
import java.net.URI;

final S3Client client = S3Client.builder()
        .endpointOverride(URI.create("http://localhost:9000"))
        .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("assess_key", "secret_key")))
        .region(Region.US_EAST_1)
        // 关键配置:指定签名算法+开启路径样式访问
        .serviceConfiguration(S3Configuration.builder()
                .signingAlgorithm(SigningAlgorithm.AWS4_HMAC_SHA256)
                .pathStyleAccessEnabled(true)
                .build())
        .build();

上传代码无需修改

你的上传逻辑本身没有问题,保持原代码即可:

PutObjectRequest request = PutObjectRequest.builder()
        .bucket("test")
        .key(id.toString())
        .build();

client.putObject(request, RequestBody.fromFile(filePath));

补充说明

  • 路径样式访问:MinIO使用http://localhost:9000/桶名/对象键的路径格式,而AWS S3默认是虚拟主机格式,必须开启pathStyleAccessEnabled(true),否则会出现签名不匹配或桶无法识别的问题。
  • 强制指定签名算法:虽然AWS SDK 2默认采用AWS4-HMAC-SHA256,但对接MinIO这类兼容服务时,明确指定能避免版本或环境差异导致的签名逻辑异常。

内容的提问来源于stack exchange,提问作者nik0x1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:21:20