如何保护无服务器应用程序中未经身份验证的用户访问的端点
How to secure an endpoint that is accessed by unauthenticated users in a serverless application
在发送用户的登录请求之前,我们有一个端点需要查询给定租户的池 ID。 “保护”这样一个开放供未经身份验证的用户访问的端点的最佳方法是什么?
我们正在使用 API 网关和 lambda 函数以及无服务器框架。
AWS Cognito 身份池有一个可能适合您的选项。首先,我将快速介绍不同的 Cognito 服务,因为当我第一次尝试了解 Cognito 时,这让我感到困惑。
冒着过度简化的风险,AWS Cognito 的存在是为了回答两个问题:
- 你是谁? (身份验证)
- 你能做什么? (授权)
Cognito 通过两种不同的产品解决了这些问题:用户池(身份验证)和身份池(授权)。
您可以将 Cognito 用户池视为应用程序的用户目录。在较高级别,用户池可让您处理用户注册、身份验证、帐户恢复,并支持使用第三方身份提供商(如 Facebook、Google 等)进行身份验证
Cognito Identity Pools 提供了一种授权用户使用各种 AWS 服务的方法。您可以将其视为分发 AWS 凭证的自动售货机。例如,如果您需要授予用户将文件上传到 S3 存储桶或调用 API 网关中的端点的权限,您可以使用身份池来实现。
这里有一个方便的插图来描述我上面概述的内容。
Cognito 可让您支持身份池 (instructions here) 中未经身份验证的用户。
那么,这如何适用于您的问题?
您可以使用 Cognito 在您的 整个 API 中启用 IAM 授权,这样您就可以利用 IAM 的强大功能来控制对您的 API.当您在 Cognito 中启用未经身份验证的用户访问时,您网站的来宾访问者将被分配到 unauthenticated IAM 用户角色。登录您站点的用户将被分配到 authenticated IAM 用户角色。您可以将 IAM 策略附加到这些角色,定义每个角色可以访问的内容。
例如,您可能希望将未经身份验证的用户限制在某些 API 端点。另一方面,经过身份验证的用户可能有权调用您的应用程序中的 all API 端点。
在发送用户的登录请求之前,我们有一个端点需要查询给定租户的池 ID。 “保护”这样一个开放供未经身份验证的用户访问的端点的最佳方法是什么?
我们正在使用 API 网关和 lambda 函数以及无服务器框架。
AWS Cognito 身份池有一个可能适合您的选项。首先,我将快速介绍不同的 Cognito 服务,因为当我第一次尝试了解 Cognito 时,这让我感到困惑。
冒着过度简化的风险,AWS Cognito 的存在是为了回答两个问题:
- 你是谁? (身份验证)
- 你能做什么? (授权)
Cognito 通过两种不同的产品解决了这些问题:用户池(身份验证)和身份池(授权)。
您可以将 Cognito 用户池视为应用程序的用户目录。在较高级别,用户池可让您处理用户注册、身份验证、帐户恢复,并支持使用第三方身份提供商(如 Facebook、Google 等)进行身份验证
Cognito Identity Pools 提供了一种授权用户使用各种 AWS 服务的方法。您可以将其视为分发 AWS 凭证的自动售货机。例如,如果您需要授予用户将文件上传到 S3 存储桶或调用 API 网关中的端点的权限,您可以使用身份池来实现。
这里有一个方便的插图来描述我上面概述的内容。
Cognito 可让您支持身份池 (instructions here) 中未经身份验证的用户。
那么,这如何适用于您的问题?
您可以使用 Cognito 在您的 整个 API 中启用 IAM 授权,这样您就可以利用 IAM 的强大功能来控制对您的 API.当您在 Cognito 中启用未经身份验证的用户访问时,您网站的来宾访问者将被分配到 unauthenticated IAM 用户角色。登录您站点的用户将被分配到 authenticated IAM 用户角色。您可以将 IAM 策略附加到这些角色,定义每个角色可以访问的内容。
例如,您可能希望将未经身份验证的用户限制在某些 API 端点。另一方面,经过身份验证的用户可能有权调用您的应用程序中的 all API 端点。