您可以使用以下代码示例解决“AWS Java SDK - 发送SAML请求到STS - 无法找到请求目标的有效证书路径。”问题:
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.AssumeRoleWithSAMLRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleWithSAMLResult;
import com.amazonaws.services.securitytoken.model.Credentials;
public class STSExample {
public static void main(String[] args) {
String roleArn = "arn:aws:iam::123456789012:role/RoleName";
String principalArn = "arn:aws:iam::123456789012:saml-provider/ProviderName";
String samlAssertion = ""; // Replace with your SAML assertion
BasicAWSCredentials basicCredentials = new BasicAWSCredentials("", "");
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(basicCredentials))
.build();
AssumeRoleWithSAMLRequest assumeRoleWithSAMLRequest = new AssumeRoleWithSAMLRequest()
.withRoleArn(roleArn)
.withPrincipalArn(principalArn)
.withSAMLAssertion(samlAssertion);
AssumeRoleWithSAMLResult assumeRoleWithSAMLResult = stsClient.assumeRoleWithSAML(assumeRoleWithSAMLRequest);
Credentials credentials = assumeRoleWithSAMLResult.getCredentials();
System.out.println("Access Key ID: " + credentials.getAccessKeyId());
System.out.println("Secret Access Key: " + credentials.getSecretAccessKey());
System.out.println("Session Token: " + credentials.getSessionToken());
System.out.println("Expiration: " + credentials.getExpiration());
}
}
在代码中,您需要替换以下部分:
roleArn
:目标角色的 Amazon Resource Name (ARN)principalArn
:SAML 提供程序的 Amazon Resource Name (ARN)samlAssertion
:SAML 断言(替换为您的实际 SAML 断言)YOUR_AWS_ACCESS_KEY
:您的 AWS 访问密钥YOUR_AWS_SECRET_ACCESS_KEY
:您的 AWS 密钥访问密钥确保您已经安装了 AWS Java SDK 并导入了所需的依赖项。此代码将使用提供的 SAML 断言向 AWS Security Token Service (STS) 发送请求,并从响应中获取临时凭证。