AWS Cognito-帮助了解身份验证和未经身份验证的访问

时间:2018-08-23 00:44:16

标签: amazon-web-services amazon-cognito aws-cognito

我不了解身份验证。与不认证AWS Cognito中的用户访问。在学习有关Cognito的知识时,我在Internet上遇到了几篇文章,并在Stackoverflow中遇到了与此相关的问题,我只是没有掌握这个概念。

我正在收集一个简单的取消验证用例。 Cognito中的用户访问权限是指当我们有需要访问某些具有帐户但未“登录”的AWS资源的用户时。但这怎么可能呢?为了获得访问令牌,您是否不需要有效的用户名和密码?如果通过取消验证。我们是指具有有效访问令牌但不能(基于某些用户池参数)访问某些资源的用户,我想这是有道理的,但我不了解Cognito在这方面的工作方式。

我已经花了数小时不了解这个概念,如果有人愿意分享,我真的只需要社区的一点帮助。

更新:令我感到困惑的是“未认证”。已经是未登录用户,不是吗?为什么我必须或想要获得未登录用户的访问令牌?这样做的目的是什么?

1 个答案:

答案 0 :(得分:1)

使用AWS Cognito入门时,令人困惑的是它实际上是两项服务。 Cognito用户池是一个验证用户,而Cognito身份池授权用户的用户存储。

取消身份验证:

当提到未经身份验证的流时,您将跳过身份验证过程,而实际上只是通过身份池进行授权。为此,请设置代码提供程序,并调用GetID。这将在身份池中生成一个identityID,并检索授权令牌,这些令牌基于IAM角色为未经身份验证的用户提供访问权限。 Example here

身份验证:

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

我希望一切都有意义。我将举例说明为什么您可以将两者结合在一起

示例

假设我们正在建立一个网络平台,列出我们城市周围的事件。该平台需要:

  • 在数据库中存储事件

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

  • 允许居民查看事件

我们不希望居民必须登录才能查看公开列出的事件,因此,当他们访问我们网站上未知的事件页面时,他们实际上是在使用身份库进行授权。因此,可以向他们提供未经身份验证的IAM角色访问权限,以对我们的数据库进行GET API调用,以检索事件。

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