Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.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 AWS Cognito-帮助理解经过身份验证的访问与未经身份验证的访问_Amazon Web Services_Amazon Cognito_Aws Cognito - Fatal编程技术网

Amazon web services AWS Cognito-帮助理解经过身份验证的访问与未经身份验证的访问

Amazon web services AWS Cognito-帮助理解经过身份验证的访问与未经身份验证的访问,amazon-web-services,amazon-cognito,aws-cognito,Amazon Web Services,Amazon Cognito,Aws Cognito,我不懂阿瑟。vs.unauth。AWS Cognito中的用户访问。在学习Cognito的过程中,我在互联网上看到了几篇文章,以及Stackoverflow中关于这一点的问题,我只是没有掌握这个概念 我正在收集unauth的一个简单用例。Cognito中的用户访问是指需要访问某些AWS资源的用户拥有帐户但没有“登录”。但这怎么可能呢?换句话说,要获得访问令牌,您不需要有效的用户名和密码吗?如果未经授权。我们指的是一个拥有有效访问令牌但不能访问某些资源(基于某个用户池参数)的用户,我认为这是有意义

我不懂阿瑟。vs.unauth。AWS Cognito中的用户访问。在学习Cognito的过程中,我在互联网上看到了几篇文章,以及Stackoverflow中关于这一点的问题,我只是没有掌握这个概念

我正在收集unauth的一个简单用例。Cognito中的用户访问是指需要访问某些AWS资源的用户拥有帐户但没有“登录”。但这怎么可能呢?换句话说,要获得访问令牌,您不需要有效的用户名和密码吗?如果未经授权。我们指的是一个拥有有效访问令牌但不能访问某些资源(基于某个用户池参数)的用户,我认为这是有意义的,但我不理解Cognito在这方面是如何工作的

我已经花了好几个小时在这个w/o上了解这个概念,如果有人愿意分享,我真的需要社区的一点帮助


更新:让我困惑的是“未经授权”。是否已经有未登录用户?为什么我必须或想要为未登录的用户获取访问令牌?这样做的目的是什么?

一开始使用AWS Cognito时令人困惑的是,它实际上是两个服务。Cognito用户池是对用户进行身份验证的用户存储,Cognito身份池授权用户

Unauth: 当引用未经身份验证的流时,您将跳过身份验证过程,实际上只是使用身份池进行授权。要在代码中执行此操作,需要设置凭据提供程序,并调用GetID。这将在标识池中生成一个identity ID,并检索授权令牌,这些令牌基于IAM角色为未经身份验证的用户提供访问权限

Auth: 现在,对于经过身份验证的流,在使用标识池进行授权之前,必须拥有身份验证令牌。这些可以通过与第三方(例如Facebook)或Cognito用户池进行身份验证来检索。您可以通过提供用户名/电子邮件和密码来验证这些服务。然后,这些服务交付的令牌可以“传递”给凭证提供者。通过这种方式完成后,使用标识池进行授权将返回访问令牌,这些令牌基于IAM角色为经过身份验证的用户提供访问权限。此外,用户可以“注销”然后“重新登录”,他们将能够收到第一次使用身份池授权时为他们生成的相同身份ID

我希望这一切都有意义。我将举一个例子说明为什么你可以将两者结合起来

例子 比如说,我们正在建立一个网络平台,列出我们城市周围的事件。该平台需要:

  • 在数据库中存储事件

  • 允许城市组织者将活动添加到数据库中

  • 允许居民查看事件

我们不希望居民必须登录才能查看公开列出的活动,因此当他们访问我们网站的活动页面时(他们不知道),他们实际上会使用身份池进行授权。因此,他们被提供了未经IAM角色访问的权限,以对我们的数据库进行GET API调用,从而检索事件


当然,我们不希望任何人只向数据库添加事件。所以对于城市组织者来说,有一个登录表单。此登录表单使用用户名和密码向用户池进行身份验证。然后,用户池令牌被用于通过身份池进行授权,授予他们对API进行POST调用的auth IAM角色访问权限,允许他们向我们的数据库添加事件。

身份验证意味着已经完成了身份确认过程。未经身份验证意味着用户尚未完成该过程,因此您不了解他们。考虑这个网站-未经认证的用户(谁可能或可能没有一个帐户)可以阅读任何帖子,可以张贴他们的答案,但没有别的(没有投票,评论,编辑等)。通过身份验证的用户通常可以做更多的事情,因为SO知道他们是谁以及他们获得了哪些特权。但是默认情况下,您不是未经身份验证的吗?这就是我的困惑。未经授权的用户和internet上的用户有什么区别?为什么您认为未经授权的用户和internet上的用户之间必然有区别?我们为Cognito用户池中未经授权的用户创建了IAM角色。这就是def。一个不同点。约翰,你真的很精明,看起来很懂你的东西。我只是不明白。有没有一个地方可以让我更多地了解它?AWS文档对我来说没有意义。谢谢,非常有用,非常清晰。只有一个后续问题-为什么我需要获得授权。不打算登录的用户的代码。难道我不能通过向公众提供资源,让他/她在没有任何身份池和/或用户池的情况下访问资源吗。为未登录的用户获取身份验证码似乎效率较低。如果您所说的身份验证码是指来自身份池的令牌,那么您需要这些令牌,因为AWS仍然需要知道调用方的角色。如果没有角色,他们可以拨打任何他们想要的电话,包括管理员电话,甚至EC2实例更改,从而导致安全和计费风险。您可以使用API网关和Lambda设置一个API,使其端点不需要任何类型的身份验证/未授权/IAM签名。通过这种方式,IAM角色提供的安全性将放在后端Lambda函数(或您选择使用的任何函数)上,用户只需直接调用API即可。有两种情况:1)访问受保护的AWS资源-。。。在这个场景中,我理解为什么我们需要访问令牌,因为我们不希望互联网上的每个用户都使用我们的基础设施。2.)访问不需要登录的资源-。。。在这种情况下,无论我们是通过不需要登录的用户池获取身份验证代码,还是将其公开使用。