如何使用带有自定义身份验证的 AWS cognito 创建临时 s3 上传安全令牌

how to use AWS cognito with custom authentication to create temporary s3 upload security token

所以我对关于 Cognito 的 Amazon 文档关于他们陈述的用例之一感到有点困惑:"use your own identity system... allowing your apps to save data to the AWS cloud"。

在我的例子中,我想给他们 aws 令牌,让他们从移动客户端直接上传到 s3,而无需将我的 aws 密钥放在客户端设备上。

为了在服务器端实现这个——我如何生成正确的凭据,以便客户端可以在客户端应用程序上使用这个身份上传到 s3?

我先打电话吗

  1. getId()(如果我使用自己的登录名,我会传递什么值 - 因为我没有提供 facebook 或 twitter ID?如何传递我自己的数据库生成的用户IDs?

  2. AWS.CognitoIdentity.getCredentialsForIdentity() 来自 congito API 的方法...或者我必须重新创建一个 AWS.CognitoIdentity?

是否有指向好的示例的链接?我在文档本身中找不到任何完整示例。

例如,亚马逊在他们的文档中说

var identityId = AWS.config.credentials.identityId;

立即为您的最终用户检索一个 identityid,但是看着它,它似乎是一个 属性 而不是一个 id 工厂。它如何生成唯一 ID,或者我的所有用户共享一个身份 ID?我是否可以从中获得某种凭证,然后我可以将其传递到我的移动客户端以获得上传到 s3 的权限?

我还阅读了一些有关 AWS STS 服务的内容 - 它是使用 Cognito 的替代方法吗?

你可以找到一个例子in this AWS Mobile blog post and the differences between developer authenticated identities and regular identities in this other blog post

基本上,流程是您的应用程序将针对您的后端进行身份验证,然后您的后端程序将调用 GetOpenIdTokenForDeveloperIdentity 并将生成的令牌和身份 ID 发送到用户的应用程序。用户的应用程序可以使用此令牌通过 SDK 获取 Cognito 凭证,并使用此凭证调用 S3 或其他 AWS 服务。每个用户都有自己的凭据,因此他们只能访问自己在 S3 中的资源。

关于STS,这是SDK 内部用来获取凭据的,但只要您使用SDK,就无需担心。它不是 Cognito 的替代品,但它们可以协同工作。