RESTクライアントからAPIエンドポイントを呼び出すと、Signatureに関してエラーが発生しました。JavaからAWSでシグネチャを生成する方法
要求:
ホスト:https://xxx.execute-api.ap-southeast-1.amazonaws.com/latest/api/name
認可:AWS4-HMAC-SHA256資格=
{AWSKEY}
/20160314/AP-南東-1 /実行-API/aws4_request、SignedHeaders =ホスト、範囲、x-amz-date、署名={signature}
x-amz-date:20160314 T102915Z
応答:Javaコードから
{
"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' "
}
は、私が署名を生成する方法のAWSの参照を行いました。
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;
}
署名を生成する際に間違っていたことを知っていますか?署名を生成する方法
参考:http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-java
ソリューションを見つけましたか? –