Я пытаюсь получить подпись для кода ниже, но результат, который я получаю, неверен. Когда время UTC составляет 20190108T053505Z , я получаю результат:
AWS4-HMAC-SHA256 Credential = TEST_ACCESS_KEY / 20190108 / нас-восток-1 / iotdata / aws4_request, SignedHeaders = хозяин; х-АМЗ-дата Подпись = e797617c297b6ae2bed4fb9a5ae3b85b37d7a77d12bb8d0329d6101831376d64
Как мне заставить подпись работать правильно?
public class MainActivity extends AppCompatActivity {
public static TextView data;
private AWS4Signer signer = new AWS4Signer();
Request<?> aws;
String AccessKey = "TEST_ACCESS_KEY";
String SecretKey = "TEST_SECRET_KEY";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = (TextView) findViewById(R.id.fetchdata);
AWSCredentials credentials = new BasicAWSCredentials(AccessKey, SecretKey);
aws = generateBasicRequest();
signer.setRegionName("us-east-1");
signer.setServiceName("iotdata");
signer.sign(aws, credentials);
String test = aws.getHeaders().get("X-Amz-Date") + "\n\n" + aws.getHeaders().get("Authorization");
MainActivity.data.setText(test);
}
private Request<?> generateBasicRequest() {
Request<?> request = new DefaultRequest<Void>("iotdata");
Map<String, String> map = new HashMap<String, String>();
map.put("Content-Type", "application/x-www-form-urlencoded");
request.setHeaders(map);
request.setResourcePath("/");
request.setEndpoint(URI.create("https://a37j7zivprtjq5.iot.us-east-1.amazonaws.com/things/thermostat/shadow"));
request.setHttpMethod(HttpMethodName.GET);
return request;
}
}
Правильный результат, который я должен получить для времени UTC:
Учетные данные AWS4-HMAC-SHA256 = TEST_ACCESS_KEY / 20190108 / us-east-1 / iotdata / aws4_request, SignedHeaders = тип содержимого; host; x-amz-date , подпись = f39cc350ff5b864f5b56086086086086086086086086086086086086086086086086086086086086086086086086086081086086086086086085805604