场景:
我在亚马逊上创建了一个应用程序,并使用登录亚马逊,它返回一个"access_token"。然后我运行:
AWS.config.credentials = new AWS.WebIdentityCredentials({
RoleArn: 'arn:aws:iam::416942672???:role/???_amazon_role',
ProviderId: 'www.amazon.com',
WebIdentityToken:"?????????"
});
AWS.config.region = 'us-west-2';
dynamodb = new AWS.DynamoDB() dynamodb.listTables({}, function a(error,data){
alert( "error: " + JSON.stringify(error) );
alert( JSON.stringify(data) );
});
当我稍后运行ListTable
函数时,它将返回:
error: {"message":"Missing credentials in config","code":"SigningError","name":"SigningError","statusCode":403,"retryable":false}
我发现我似乎不得不打电话给AssumeRoleWithWebIdentity
。但是我如何在AWS SDK for JavaScript中调用它呢?或者还有其他我错过的过程吗?
获取临时凭据的过程确实需要调用AssumeRoleWithWebIdentity-此低级API调用隐含在更高级别的AWS SDK for JavaScript凭据提供程序调用new AWS.WebIdentityCredentials()
中,请参见例如class:AWS.WebIdentityCredentials:
表示从STS Web标识联合检索的凭据支持
默认情况下,此提供程序使用AWS.STS.assumeRoleWithWebIdentity()服务操作。此操作要求RoleArn包含IAM信托政策的ARN将为其提供凭据的应用程序。此外WebIdentityToken必须设置为标识提供的令牌提供商。有关创建凭据的示例,请参见constructor()对象具有正确的RoleArn和WebIdentityToken值。
考虑到错误消息"配置中缺少凭据",您显然传递了不正确的WebIdentityToken
,这并不奇怪,因为您只指定了一些?????????
占位符;)-由于您已经使用Login with Amazon,返回access_token,因此您只需要传递该access_token的内容,而不是?????????
占位符作为WebIdentityToken
的值,并且应该全部设置。
- 对于其他读者:第6节。在浏览器中配置Web身份联合会的提供了一个通过Facebook登录检索访问令牌的示例。如前所述,其他身份提供商将有类似的设置步骤,包括加载相应的SDK、登录和接收访问令牌,特别是如何处理亚马逊登录在Getting Started for Web中有详细说明
以这种方式使用AWS实例:
var aws = AWS ;
var region = aws.config.region = 'us-east-1';
var cred = new aws.Credentials(<YOUR_ACCESS_KEY_ID>,
<YOUR_SECRET_ACCESS_KEY>, sessionToken = null);
要获取ACCESS KEY ID和SECRET ACCESS_KEY,请访问:
AWS IAM>用户>安全凭据>访问密钥
现在使用aws实例进行进一步操作。