Error while Invoking API Gateway Endpoint using AWS SDK V2

27 views Asked by At

I am trying to invoke apigateway endpoint using AWS SDK V2 . I am trying to use IAM authorization for api gateway. For that i am generating credentials assume role api of sts client. Getting missing authentication token error.

public static void main(String[] args) {

    String apiKey = "abc123";
    String apiUrl = "https://abc123.execute-api.us-east-1.amazonaws.com/dev/";
    String serviceName = "execute-api";
    String region = "us-east-1";

   
    SdkHttpClient httpClient = ApacheHttpClient.builder().build();
    StsClient stsClient = StsClient.builder()
          .region(Region.US_EAST_1) .build();

    SdkHttpFullRequest request = SdkHttpFullRequest.builder()
            .uri(URI.create(apiUrl))
            .method(SdkHttpMethod.POST)          
            
            .build();
    
    AssumeRoleWithWebIdentityRequest
      assumeRoleWithWebIdentityRequest=AssumeRoleWithWebIdentityRequest.builder()
      .roleArn("arn:aws:iam::12345678:role/gateway-role")
      .webIdentityToken("xbsdfssdfs/s")
      .roleSessionName("test") .build();
      
      Builder stsAssumeRoleCredentialsProvider=
      StsAssumeRoleCredentialsProvider.builder();
      
      AssumeRoleWithWebIdentityResponse
      assumeRoleWithWebIdentityResponse=stsClient.assumeRoleWithWebIdentity(
      assumeRoleWithWebIdentityRequest); String
      accessKey=assumeRoleWithWebIdentityResponse.credentials().accessKeyId();
      String
      secretKey=assumeRoleWithWebIdentityResponse.credentials().secretAccessKey();
      String
      sessionKey=assumeRoleWithWebIdentityResponse.credentials().sessionToken();
      AwsBasicCredentials creds = AwsBasicCredentials.create(accessKey, secretKey);

    Aws4Signer signer = Aws4Signer.create();
    
    Aws4SignerParams signerParams = 
            Aws4SignerParams.builder()
                    .awsCredentials(creds)
                    .signingName(serviceName)
                    .signingRegion(Region.of(region))
                    .build();
    signer.sign(request, signerParams);

    try {
        HttpExecuteResponse  response = httpClient.prepareRequest(HttpExecuteRequest.builder().request(request).build()).call();
        System.out.println("Response Code: " + response.httpResponse().statusCode());
        System.out.println("Response Body: " + response.responseBody());
        System.out.println(response);
    } catch (Exception e) {
        System.err.println("Error: " + e.getMessage());
    }
0

There are 0 answers