使用 AWS STS 获取临时凭证:Web 身份令牌在哪里?



我的用户通过连接到cognito的微服务登录到我的应用程序(请求通过API网关代理(

他们获得一个会话令牌。

登录后,他们需要将一些文件放入 S3。

我想使用 STS 为他们提供临时凭据,但要调用sts.AssumeRoleWithWebIdentity我需要 Web 标识令牌。

如何获取以会话令牌作为输入的 Web 标识令牌?

我编写了一个临时 lambda(节点(,它在登录时使用用户名和密码返回 STS 凭证:

const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
const cognitoidentity = new AWS.CognitoIdentity();
cognitoidentityserviceprovider.initiateAuth(...) //AuthFlow: 'USER_PASSWORD_AUTH'
cognitoidentity.getId(...)
cognitoidentity.getCredentialsForIdentity(...)

登录和文件上传之间可能有一些时间,我不希望用户每次都提交用户/密码。也没有AuthFlow接受会话令牌。

我猜 API 网关可以返回一些有用的东西,但我在文档中没有找到任何内容: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

先检查几点:

  • 让经过身份验证的用户在 IAM 角色下"伪装",为此,我们使用信任关系,您可以快速重复使用分配给您的 Cognito 身份池的 IAM 角色。
  • 授予该 IAM 角色访问 S3 存储桶的策略

完成后:

再次运行cognitoidentity.getCredentialsForIdentity(...),它将首先通过 sts,因此您不必调用 sts 代入角色 api。如果成功,响应应具有AccessKeyIdSecretKeySessionToken。这些是有权访问 s3 的过期 aws 信条,将在一小时后消失(除非设置(。将它们用作普通会话身份验证。

creds = new SessionAWSCredentials(AccessKeyId, SecretKey, SessionToken);
s3Request = CreateAmazonS3Client(creds);

相关内容

  • 没有找到相关文章

最新更新