如何纯粹使用Cognito对用户进行S3身份验证

axe*_*ann 10 amazon-s3 amazon-web-services node.js jwt amazon-cognito

我已经阅读了这篇文章以及关于如何在API中使用Cognito令牌的AWS回复 以及如何使用AWS cognito和自定义身份验证来创建临时s3上传安全令牌

我还不清楚是否有一个更简单的解决方案来保护S3访问.

我有一个移动客户端和一个node.js后端.客户端使用后端进行身份验证,并接收jwt accessstoken以进一步调用我的后端.除了与我自己的后端进行通信之外,用户还应该可以上传和下载S3的文件.我正在寻找最简单的解决方案,以确保只有对我的后端有有效accessstoken的用户才能上传到S3.

我可以执行以下操作(这是基于此博客文章http://blog.backspace.academy/2015/03/using-cognito-with-nodejs-part-2.html):

  1. 客户端使用我的自定义node.js后端进行身份验证,并从我的后端接收自定义的accessstoken
  2. 我的node.js后端获取CognitoID AWS临时用户凭据.但是,AWS文档说我们还需要一个会话令牌(大概是通过调用CognitoSync),因此我假设我的需要获取会话令牌.
  3. 我的node.js后端将那些临时凭证和会话令牌传递给客户端
  4. 客户端使用它们通过AWS SDK传递凭证+会话令牌来调用S3.

我错过了什么吗?有更简单的方法吗?我假设没有办法让客户端通过我自己的自定义node.js用户访问AWS/S3/Cognito并让S3/Cognito通过调用我自己的node.js API验证令牌,该API可以验证此令牌.

Sco*_*eke 5

你已经明白了。您可以从后端获取凭证并将 AWS 凭证交付给客户端。使用会过期的临时凭证时,您将需要会话密钥 - 您绝对应该对移动应用程序客户端使用临时凭证。

如果您想使用自己的后端(在后端使用用户名/密码)对用户进行身份验证,您可以使用Amazon Cognito 的开发人员身份验证功能。如果您的用户将使用 Facebook 进行身份验证,您只需将 Facebook 访问令牌传递给 Amazon Cognito,如Facebook 集成主题中所述

无论哪种方式,您将在 AWS 文档中看到的“标准”流程是让 Amazon Cognito 将 AWS 会话凭证直接传送到移动应用程序(而不是通过后端)。使用 Developer Authenticated Identities 时,移动应用程序交换 OpenID Connect 令牌(由后端从 Cognito 的GetOpenIdTokenForDeveloperIdentity 调用检索并在响应身份验证请求时传送到移动应用程序)以调用 Cognito 的GetCredentialsForIdentity。使用 Facebook 时,您可以只传递 Facebook 访问令牌而不是 OpenID 令牌。无论哪种方式,通过使用此流程,您都可以使用“标准”Cognito 将 AWS 凭证获取到应用程序,如 iOS、Android、JavaScript、Unity 和 Xamarin 中所示获取凭据主题

话虽如此,您确实可以代表用户从后端获取 AWS 凭证并将其推送到客户端,但请记住,所有 AWS 移动开发工具包示例都假设您使用的是 Cognito,如图所示上面的获取凭据主题,因此您必须考虑到这一点。如果您想查看通过您自己的后端路由凭证的示例,请参阅 API Gateway Secure Pet Store 示例(后端代码客户端代码