为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
森栏 2022-05-18 10:43:01
我的用户通过连接到 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 Gateway 可能会返回一些有用的东西,但我在文档中没有找到任何东西: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference。 html#context-variable-reference
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

先做几项检查:

  • 让 cognito 身份验证的用户在 iam 角色下“伪装”,为此我们使用信任关系,您可以快速重用分配给您的 cognito 身份池的 iam 角色。

  • 授予该 iam 角色访问 s3 存储桶的策略

完成后:

再次运行cognitoidentity.getCredentialsForIdentity(...),它会先通过sts,因此您不必调用sts承担角色api。如果成功,响应应该有AccessKeyId和。这些是可以访问 s3 的到期 aws 凭据,将在一个小时后消失(除非设置)。将它们用作正常的会话身份验证。SecretKeySessionToken

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


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信