HTTP-запрос к AWS с охттп - PullRequest
       6

HTTP-запрос к AWS с охттп

0 голосов
/ 11 января 2020

Я довольно новичок в AWS, и я хотел бы использовать службу в своем Android приложении. К сожалению, у этой службы, AWS AppConfig, еще нет мобильного SDK, поэтому я пытался отправить запрос GET на GetConfiguration API с помощью okhttp.

Чтобы подписать запрос , я использую AWS4Signer из AWS Android SDK. Я предоставляю учетные данные с реализацией AWSCredentials .

    com.amazonaws.Request requestAws = new DefaultRequest(amazonWebServiceRequest, serviceName);
    URI uri = URI.create("https://appconfig.us-west-2.amazonaws.com/applications/[applicationID]/environments/[environmentID]/configurations/[configurationID]?client_id=ClientId");
    requestAws.setEndpoint(uri);
    requestAws.setHttpMethod(HttpMethodName.GET);
    AWS4Signer signer = new AWS4Signer();
    signer.setServiceName(serviceName);
    signer.setRegionName(Regions.US_WEST_2.getName());
    signer.sign(requestAws, credentials);
    // get relevant authorization headers from requestAws and insert them in the okhttp request as headers

Когда я отправляю запрос в GetConfiguration, происходит сбой при

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.

Я попытался отправить запрос к GetDeploymentStrategy , и это было успешно, так что я не думаю, что это мои учетные данные или как я прикрепляю их к запросу.

Я думаю, что проблема в том, как я присоединяю параметры запроса, так как API, которые не требуют дополнительных параметров запроса, успешно (GetDeploymentStrategy и GetApplication), в то время как GetConfiguration, которая требует client_id, не работает.

Мой вопрос: есть ли примеры того, как обрабатывать параметры запроса с подписывающим лицом и запросом?

Большое спасибо.

1 Ответ

0 голосов
/ 15 января 2020

Потратил еще немного времени, пробуя разные вещи, и у меня есть кое-что, что работает. Параметры запроса должны быть присоединены с использованием метода com.amazon aws .Request setParameters . Я сделал то же самое для пути к ресурсу и setResourcePath .

Пример создания запроса на подпись:

private static String endpoint = "https://appconfig.us-west-2.amazonaws.com";
private static String resourcePath = "/applications/[applicationID]/environments/[environmentID]/configurations/[configurationID]";
private static String parameters = "?client_id=hello&client_configuration_version=0";
private static String fullUrl = endpoint + resourcePath + parameters;
private static String serviceName = "appconfig";

private com.amazonaws.Request createAwsRequest() {
    AmazonWebServiceRequest amazonWebServiceRequest = new AmazonWebServiceRequest() {
    };

    com.amazonaws.Request requestAws = new DefaultRequest(amazonWebServiceRequest, serviceName);

    URI uri = URI.create(endpoint);
    requestAws.setEndpoint(uri);
    requestAws.setResourcePath(resourcePath);
    Map<String, String> params = new HashMap<>();
    params.put("client_id", "hello");
    params.put("client_configuration_version", "0");
    requestAws.setParameters(params);
    requestAws.setHttpMethod(HttpMethodName.GET);

    return requestAws;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...