3

我正在寻找用于调用 AWS API 网关的 java 代码示例。

我可以调用不需要 IAM 验证的 AWS API 网关,但我发现很难找到一个如何构建 URL 的清晰示例。

您如何正确传递密钥和密钥 ID?我是否必须完成按照 Signature Version 4 协议对 URL 进行编码所需的所有步骤,或者我可以只在 URL 中包含密钥和密钥 ID?

是否有使用 AWS 开发工具包调用 AWS API 网关的 Java 编写的客户端程序的代码示例?在通用调用中,您可以根据需要传入 URL 和其他参数?

我尝试使用由 AWS API Gateway 生成的 AWS Java SDK。我在使用生成的 SDK 时遇到问题,任何教程将不胜感激。我找不到有关如何使用构建的 SDK 调用 API 的文档。我已经使用 MAVEN 构建了 SDK .. 我想,我正在尝试按照本教程进行操作...

http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-apigateway-generated-java-sdk.html

....但我不确定我是否正确安装了 SDK,并且我看不到密钥和密钥 ID 传递给 API 调用的位置...

4

2 回答 2

0
You should sign your request and credentials as per AWS Signature V4. 

签名示例代码可用@ https://s3.amazonaws.com/aws-java-sdk/samples/AWSS3SigV4JavaSamples.jar

Sample code : 
URL url = new URL("https://XXXXXXX.execute-api.us-west-2.amazonaws.com/dev/pets");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("host", "XXXXXXXXXX.execute-api.us-west-2.amazonaws.com");


         Map<String, String> headers = new HashMap<String, String>();
            headers.put("x-amz-content-sha256", AWS4SignerBase.EMPTY_BODY_SHA256);
            headers.put("X-Amz-Security-Token", "XXXXXX+XXXXXXXXXXXXXXX/5N+XXXXXXXXX/XXXXX/XXXXXX/XXXXXXXX/XXXXXXXX=");
            AWS4SignerForAuthorizationHeader signer = new AWS4SignerForAuthorizationHeader(
                    url, "GET", "execute-api", "us-west-2");
            String authorization = signer.computeSignature(headers, 
                                                           null, // no query parameters
                                                           AWS4SignerBase.EMPTY_BODY_SHA256, 
                                                           "XXXXXX", 
                                                               "S+XXXXXX+XXXXXX/XXXX");



            headers.put("Authorization", authorization);
            String response = HttpUtils.invokeHttpRequest(url, "GET", headers, null);
于 2019-09-24T22:04:00.803 回答
-1

您应该能够使用凭据初始化 SDK 客户端并传入凭据提供程序,例如,

BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key_id");
SimpleCalcSdk sdkClient = SimpleCalcSdk.builder()
                         .withCredentials(awsCreds)
                         .build();
于 2017-03-27T06:31:18.043 回答