首页 文章

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

提问于
浏览
9

我已经阅读了这篇文章和How do I use a Cognito token with API?上的AWS回复,而这一篇how to use AWS cognito with custom authentication to create temporary s3 upload security token

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

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

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

  • 客户端使用我的自定义node.js后端进行身份验证,并从我的后端接收自定义的accessstoken

  • 我的node.js后端获取CognitoID AWS临时用户凭据 . 但是,AWS文档说我们还需要一个会话令牌(大概是通过调用CognitoSync),因此我假设我的需要获取会话令牌 .

  • 我的node.js后端将这些临时凭证加会话令牌传递给客户端

  • 客户端使用它们来调用S3,并使用AWS SDK传递凭证会话令牌 .

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

2 回答

  • 4

    你已经得到了它 . 您可以从后端获取凭据并将AWS凭据提供给客户端 . 使用临时凭证时,您将需要会话密钥 - 您肯定应该使用临时凭证与移动应用客户端 .

    如果您想使用自己的后端对用户进行身份验证(使用后端的用户名/密码),可以使用Amazon Cognito's Developer Authenticated Identities feature . 如果您的用户将使用Facebook进行身份验证,您可以按照the Facebook Integration topic中的说明将Facebook访问令牌传递给Amazon Cognito .

    无论哪种方式,"standard"由您的后端流动并在响应身份验证请求时传送到移动应用程序)以调用Cognito的GetCredentialsForIdentity . 使用Facebook时,您只需传入Facebook访问令牌而不是OpenID令牌 . 无论哪种方式,通过使用此流程,您将能够使用"standard" Cognito将AWS凭据提供给应用程序,如Getting Credentials topic中的iOS,Android,JavaScript,Unity和Xamarin所示 .

    话虽如此,您确实可以代表用户从后端获取AWS凭证并将其推送到客户端,但请记住,所有AWS Mobile SDK示例都假设您正在使用Cognito,如下所示上面的Getting Credentials topic,所以你必须考虑到这一点 . 如果您想通过自己的后端查看路由凭据的示例,请参阅API Gateway Secure Pet Store示例(backend codeclient code

  • 2

    我从您正在引用的BackSpace Academy中编写了NodeJSCordova Cognito教程 . 这些教程是在当时设计的,为实施Cognito提供了急需的指导 . 尽管如此,Cognito并不总是最合适的解决方案(KISS原则) . 我想你可能会使你的解决方案变得复杂:

    • 您不需要Cognito从浏览器或服务器安全地访问S3 . 联合用户(oauth / Facebook)可以直接从浏览器或通过NodeJS应用程序访问S3 .

    • 如果您不需要Cognito键值数据存储,那么只需在浏览器端使用联合用户即可 . 实际需要NodeJS服务器吗?

    • 如果您可以从客户端执行所有操作,则不需要NodeJs服务器 .

    我建议你考虑在联盟用户的客户端做一切 . 这在AWS浏览器SDK文档“在浏览器中配置Web标识联合”下详细说明 .

    CAUTION! NEVER PUT YOUR AWS CREDENTIALS IN YOUR CODE, INCLUDING SERVER SIDE. 始终在浏览器端和服务器端使用联合用户(oauth)为您的EC2实例创建IAM角色,以连接到VPC上的S3 endpoints . 出于某些愚蠢的原因,AWS S3浏览器示例硬编码凭证 .

相关问题