STS,SAML和Java SDK无法从链中的任何提供程序加载AWS凭据

时间:2016-04-13 16:10:36

标签: java amazon-web-services aws-sdk

我正在尝试使用SAML requet(来自ADFS)从STS获取AWS的临时凭证。 我有SAML令牌,角色arn和principalARN。如果我使用它来使用AWS CLI登录它们就可以了。但是使用与Java SDK相同的3会产生以下错误。

  

无法从链中的任何提供商加载AWS凭据

这是我正在使用的Java代码。

AssumeRoleWithSAMLRequest samlreq =new AssumeRoleWithSAMLRequest().withPrincipalArn(principalARN).withRoleArn(roleARN).withSAMLAssertion(SAMLToken);

AWSSecurityTokenServiceClient stsclient = new AWSSecurityTokenServiceClient();

AssumeRoleWithSAMLResult tempcreds=stsclient.assumeRoleWithSAML(samlreq);

知道我做错了什么或错过了吗?

这是堆栈跟踪:

  

线程中的异常" main" com.amazonaws.AmazonClientException:无法使用   从链中的任何提供程序加载AWS凭据   com.amazonaws.auth.AWSCredentialsProviderChain.getCredentials(AWSCredentialsProviderChain.java:117)     在   com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:1098)     在   com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRoleWithSAML(AWSSecurityTokenServiceClient.java:575)     在App.main(App.java:83)

2 个答案:

答案 0 :(得分:5)

我得到它的工作最后不得不添加:

BasicAWSCredentials basicCreds=new BasicAWSCredentials("", "");
AWSSecurityTokenServiceClient stsclient = new AWSSecurityTokenServiceClient(basicCreds);   

基本上为sts客户端提供一组空白凭证。

答案 1 :(得分:0)

AWSSecurityTokenServiceClient已弃用。以下代码也适用。

BasicAWSCredentials theAWSCredentials= new BasicAWSCredentials("","");
AWSCredentialsProvider theAWSCredentialsProvider = new AWSStaticCredentialsProvider(theAWSCredentials);
AWSSecurityTokenService theSecurityTokenService = AWSSecurityTokenServiceClientBuilder.standard().withCredentials(theAWSCredentialsProvider).build();