登录
首页 >  Golang >  Go问答

寻找 AWS STS 获取临时凭证的 Web 身份令牌

来源:stackoverflow

时间:2024-03-15 09:09:27 246浏览 收藏

golang学习网今天将给大家带来《寻找 AWS STS 获取临时凭证的 Web 身份令牌》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

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

他们获得一个会话令牌。

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

我想使用 sts 为他们提供临时凭据,但要调用 sts.assumerolewithwebidentity 我需要一个 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


解决方案


首先进行一些检查:

  • 让经过身份验证的 cognito 用户在 iam 角色下“伪装”,为此,我们使用 trust relationships,以便您可以快速重用分配给您的 cognito 身份池的 iam 角色。
  • 向该 iam 角色授予 access to s3 bucket 的策略

完成后:

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

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

今天关于《寻找 AWS STS 获取临时凭证的 Web 身份令牌》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>