Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 建议:将Amazon Cognito与AWS DynamoDB集成_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Dynamodb_Amazon Cognito - Fatal编程技术网

Amazon web services 建议:将Amazon Cognito与AWS DynamoDB集成

Amazon web services 建议:将Amazon Cognito与AWS DynamoDB集成,amazon-web-services,amazon-s3,aws-lambda,amazon-dynamodb,amazon-cognito,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Dynamodb,Amazon Cognito,我已经构建了一个与AmazonCognito连接的应用程序,用于用户的登录和注册。目前,应用程序支持三种不同的订阅(免费、基本、高级)。如果用户登录基本订阅,我想让他们最少访问DynamoDB以下载运行应用程序服务所需的应用程序部分 如何将DynamoDB与Cognito直接连接 我不确定,遵循这种情况的最佳方法是什么 (请注意-这不是一个基于移动的应用程序,因此不要建议使用AWS Amplify或relatable服务)当我第一次学习Cognito时,我已经做了与您当前所做的相同的假设。我知道

我已经构建了一个与AmazonCognito连接的应用程序,用于用户的登录和注册。目前,应用程序支持三种不同的订阅(免费、基本、高级)。如果用户登录基本订阅,我想让他们最少访问DynamoDB以下载运行应用程序服务所需的应用程序部分

如何将DynamoDB与Cognito直接连接 我不确定,遵循这种情况的最佳方法是什么


(请注意-这不是一个基于移动的应用程序,因此不要建议使用AWS Amplify或relatable服务)

当我第一次学习Cognito时,我已经做了与您当前所做的相同的假设。我知道用户池可以充当我的应用程序的用户目录,身份池可以神奇地解锁我所有的授权需求。我错了:)

尽管存在过分简化的风险,AWS Cognito的存在回答了两个问题:

  • 你是谁?(认证)
  • 你能做什么?(授权)
Cognito通过两种不同的产品解决了这些问题:用户池(身份验证)和身份池(授权)

在高层次上,用户池允许您处理用户注册、身份验证、帐户恢复,并支持与第三方身份提供商(如Facebook、Google等)的身份验证。听起来您可能已经解决了这一部分

另一方面,Cognito标识池提供了一种授权用户使用各种AWS服务的方法。您可以将其视为分发AWS凭证的自动售货机。例如,如果您需要为用户提供将文件上载到S3 bucket或调用API网关中的端点的访问权限,则可以使用标识池。你甚至可以。但是,由于应用程序用户可能没有直接连接到DynamoDB,因此这可能无法按预期的方式工作

在大多数web/移动应用程序中,用户不直接连接到DynamoDB。相反,它们与通过API与应用程序后端通信的web/移动应用程序交互。然后,该API将与DynamoDB通信。如果堆栈位于AWS中,则路径可能如下所示:

Client (web/mobile app) <-> API Gateway <-> Lambda <-> DynamoDB
客户端(web/mobile app)API网关Lambda DynamoDB
在这个架构中,您的用户将通过Cognito进行身份验证。然后,Cognito将授权用户调用API网关。API网关将执行lambda,然后它将与DynamoDB交互。本例中DynamoDB的“用户”是Lambda,而不是应用程序的用户

最后一点很重要,所以我重复一下:除非您的用户直接连接到DynamoDB(不推荐),否则他们不是在DynamoDB上操作的“用户”。因此,基于用户的cognitoid限制DynamoDB访问不是您的选择

那么,你能做什么?您的应用程序需要提供有关用户对DynamoDB的影响的业务逻辑。可能自由用户对特定分区具有只读访问权限,而高级用户可以修改同一分区。这种逻辑必须由你直接处理


我知道你说过你不想寻求放大建议,因为你的应用程序不是基于手机的。然而,Amplify提供的SDK并非特定于移动开发。Serverless的员工已经在构建一个全栈的Serverless web应用程序上取得了巨大的成功,该应用程序包括一个非常简单的应用程序。他们在web应用程序中使用Amplify与Cognito、S3和API网关集成。如果这是你想做的事情,我建议你去看看。

你说的“让他们最少接触”是什么意思?与DynamoDB通信的不是您的应用程序,而是直接与用户交互的应用程序吗?在这种情况下,您的应用程序将负责确定用户可以访问哪些功能。@JohnRotenstein,我相信这个问题可能会混淆Cognito的角色。这一点也曾让我困惑。如您所知,可以根据用户的cognito标识id限制DynamoDB访问。但是,这与将应用程序用户的访问限制在免费/基本/高级层不同。虽然这种区别可能很微妙,但在第一次使用Cognito时,它是一种令人困惑的区别,这是可以理解的。正如您所指出的,Moi所查询的功能类型是在应用程序的业务逻辑中,而不是在Cognito中发生的需求。感谢您花时间写出来。我在cognito中使用这种模式已经有一段时间了,不过这些链接很有趣。它是一个桌面应用程序。所以,我不确定事情是如何运作的。你能推荐一种在桌面应用程序中存储和上传服务器文件的方法吗?如果你正在开发一个桌面应用程序,你仍然会使用AWS SDK作为你选择的编程语言来访问S3,Cognito,我在github上发现了一个项目,该项目来自于过去的Amazon Re:Invent会议,该会议展示了如何将Cognito与Java和.Net桌面应用程序集成()。github存储库的自述文件中还链接了一个教程。我上面概述的一般方法仍然适用于桌面应用程序。您不会将DynamoDB(或任何AWS资源)“连接”到Cognito。相反,您可以使用Cognito获取可用于访问AWS资源的凭据。@johnrotenstein在他的评论中正确地指出,您的应用程序将是这些服务之间的集成点。