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());
}