AWS Java SDK – AWS-authenticatie vereist een geldige datum- of x-amz-date-header

De volgende uitzondering krijgen bij gebruik van de AWS SDK voor Java en Java 1.8u60+.

com.amazonaws.services.s3.model.AmazonS3Exception: AWS authentication requires a valid Date or x-amz-date header (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 41C359C079CBAFCF)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3608) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3561) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:647) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:632) ~[aws-java-sdk-s3-1.10.10.jar:na]

Antwoord 1, autoriteit 100%

Dit wordt veroorzaakt door een bug tussen JodaTime en versies van Java groter dan 1.8u60. Upgraden naar JodaTime versie 2.8.1 of hoger lost het probleem op. Zie de volgende Github-problemen ter referentie.

https://github.com/aws/aws-sdk-java/issues/484
https://github.com/aws/aws-sdk-java/issues/444


Antwoord 2, autoriteit 6%

Voor zover ik kan zien, zijn er drie oplossingen voor dit probleem:

  • joda-tijd upgraden
  • upgrade de AWS Java SDK
  • Java downgraden naar een versie lager dan 1.8u60 (java7 lijkt goed te werken)

Antwoord 3, autoriteit 5%

Update uw AWS Java SDK naar 1.10.1 of hoger


Antwoord 4, autoriteit 2%

Ik werd geconfronteerd tijdens het gebruik van presto.
Het probleem is dat met java-versie jdk1.8.0_60 een grotere downgrade naar jdk1.8.0_45 het probleem zal oplossen


Antwoord 5

ik heb hetzelfde probleem ondervonden. Ik heb het nu opgelost. Het enige is dat java 1.8u60+ aws sdk 1.10.10 niet ondersteunt, dus je kunt gewoon aws sdk versie 1.11.52 updaten ..ik bedoel de nieuwste versie en het heeft het opgelost .

Let ook op de conflicten in de afhankelijkheidsboom, wanneer u de versies opwaardeert. In mijn geval was er een conflict met de httpclient na het upgraden van de aws sdk-versie.


Antwoord 6

Alle antwoorden hierboven maakten me gek omdat ze aanbevelen om van bibliotheek, client of een andere grote verandering te veranderen. Ik moet client 1.9.31 gebruiken en ik heb geen controle over welke joda of JVM. Dus hier is de Java-oplossing zonder alles hierboven te hoeven doen!

Doe dit voordat u uw verzoek verzendt, zoals PutObjectRequest:

putObjectRequest.putCustomRequestHeader("x-amz-date", getServerTime());
public static String getServerTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
        "EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
    return dateFormat.format(Calendar.getInstance().getTime());
}

Other episodes