Quando richiamo gli endpoint API dal client REST, ho riscontrato un errore relativo alla firma.Come generare la firma in AWS da Java
Richiesta:
Host: https://xxx.execute-api.ap-southeast-1.amazonaws.com/latest/api/name
Autorizzazione: AWS4-HMAC-SHA256 Credential =
{AWSKEY}
/20.160.314/ap-sud-est-1/execute-api/aws4_request, SignedHeaders = host; intervallo; x-amz-date, Firma ={signature}
X-Amz-Date: 20160314 T102915Z
Risposta:
{
"message": "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. The Canonical String for this request should have been 'xxx' "
}
da codice Java, ho seguito AWS di riferimento di come generare Signature.
String secretKey = "{mysecretkey}";
String dateStamp = "20160314";
String regionName = "ap-southeast-1";
String serviceName = "execute-api";
byte[] signature = getSignatureKey(secretKey, dateStamp, regionName, serviceName);
System.out.println("Signature : " + Hex.encodeHexString(signature));
static byte[] HmacSHA256(String data, byte[] key) throws Exception {
String algorithm="HmacSHA256";
Mac mac = Mac.getInstance(algorithm);
mac.init(new SecretKeySpec(key, algorithm));
return mac.doFinal(data.getBytes("UTF8"));
}
static byte[] getSignatureKey(String key, String dateStamp, String regionName, String serviceName) throws Exception {
byte[] kSecret = ("AWS4" + key).getBytes("UTF8");
byte[] kDate = HmacSHA256(dateStamp, kSecret);
byte[] kRegion = HmacSHA256(regionName, kDate);
byte[] kService = HmacSHA256(serviceName, kRegion);
byte[] kSigning = HmacSHA256("aws4_request", kService);
return kSigning;
}
Posso sapere cosa ho sbagliato durante la creazione della firma?
riferimento come generare Firma: http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-java
Hai trovato una soluzione? –