使用 aws STS 获取临时凭证:Web 身份令牌在哪里?
Using aws STS to get temporary credentials: Where is the web identity token?
我的用户通过连接到 cognito 的微服务登录到我的应用程序(请求通过 API 网关代理)
他们获得会话令牌。
登录后,他们需要将一些文件放入 S3。
我想使用 STS 为他们提供临时凭据,但要调用 sts.AssumeRoleWithWebIdentity
我需要网络身份令牌。
如何获取以会话令牌作为输入的 Web 身份令牌?
我写了一个临时 lambda(节点),return使用用户名和密码登录时的 STS 凭据:
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
const cognitoidentity = new AWS.CognitoIdentity();
cognitoidentityserviceprovider.initiateAuth(...) //AuthFlow: 'USER_PASSWORD_AUTH'
cognitoidentity.getId(...)
cognitoidentity.getCredentialsForIdentity(...)
登录和文件上传之间可能会有一些时间,我不希望用户每次都提交 user/password。也没有接受会话令牌的 AuthFlow。
我猜 API 网关可以 return 一些有用的东西,但我没有在文档中找到任何东西:
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference
先检查几项:
- 让经过 cognito 身份验证的用户在 iam 角色下 "masquerade",为此我们使用 trust relationships,为了快速,您可以重复使用分配给您的 cognito 身份池的 iam 角色。
- 授予该 iam 角色一个策略 access to s3 bucket
完成后:
运行 cognitoidentity.getCredentialsForIdentity(...)
,它会先通过 sts,因此您不必调用 sts assume role api。如果成功,响应应该有 AccessKeyId
、SecretKey
和 SessionToken
。这些是 可以访问 s3 的过期 aws 凭证,将在一个小时后消失(除非已设置)。将它们用作普通会话身份验证。
creds = new SessionAWSCredentials(AccessKeyId, SecretKey, SessionToken);
s3Request = CreateAmazonS3Client(creds);
我的用户通过连接到 cognito 的微服务登录到我的应用程序(请求通过 API 网关代理)
他们获得会话令牌。
登录后,他们需要将一些文件放入 S3。
我想使用 STS 为他们提供临时凭据,但要调用 sts.AssumeRoleWithWebIdentity
我需要网络身份令牌。
如何获取以会话令牌作为输入的 Web 身份令牌?
我写了一个临时 lambda(节点),return使用用户名和密码登录时的 STS 凭据:
const cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider();
const cognitoidentity = new AWS.CognitoIdentity();
cognitoidentityserviceprovider.initiateAuth(...) //AuthFlow: 'USER_PASSWORD_AUTH'
cognitoidentity.getId(...)
cognitoidentity.getCredentialsForIdentity(...)
登录和文件上传之间可能会有一些时间,我不希望用户每次都提交 user/password。也没有接受会话令牌的 AuthFlow。
我猜 API 网关可以 return 一些有用的东西,但我没有在文档中找到任何东西: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference
先检查几项:
- 让经过 cognito 身份验证的用户在 iam 角色下 "masquerade",为此我们使用 trust relationships,为了快速,您可以重复使用分配给您的 cognito 身份池的 iam 角色。
- 授予该 iam 角色一个策略 access to s3 bucket
完成后:
运行 cognitoidentity.getCredentialsForIdentity(...)
,它会先通过 sts,因此您不必调用 sts assume role api。如果成功,响应应该有 AccessKeyId
、SecretKey
和 SessionToken
。这些是 可以访问 s3 的过期 aws 凭证,将在一个小时后消失(除非已设置)。将它们用作普通会话身份验证。
creds = new SessionAWSCredentials(AccessKeyId, SecretKey, SessionToken);
s3Request = CreateAmazonS3Client(creds);