amazon-web-services - AWS API 网关 : API available for authenticated and guest users only

标签 amazon-web-services amazon-cognito amazon-iam api-gateway

我是 AWS 的新手,我想了解一些基本概念。在我的 Android 应用程序中,我使用:

  • Cognito 用户池和身份池允许我的用户注册和登录,还可以作为 guest 用户使用该应用
  • API Gateway 和 AWS Lambda 创建应用程序可以调用的网络服务

我的用例非常简单:我希望我在 API Gateway 中创建的一些 API 可供我的身份验证用户我的 guest 用户使用,而其他 API 仅供我的身份验证用户使用.

对于仅供经过身份验证的用户使用的 API,我正在考虑将用户放入一组用户中(感谢 CognitoIdentityServiceProvider.adminAddUserToGroup()),这些用户可以与 IAM 具有共同的角色附加到它的策略,以允许他们访问这些 API。我认为这是有道理的,因为我会有不同类型的用户,所以我将为每种类型使用一个组。

但是对于可供我的认证用户和 guest 用户使用的 API,我非常确定我应该做什么。 API 应该是公开的,以便包括我的 guest 用户在内的任何人都可以调用它们,或者是否可以让它们只对我的经过身份验证的用户和我的 guest 用户可用,但不公开?什么是好的做法,我该如何实现?

感谢您的帮助。

最佳答案

你应该使用 "API Gateway Lambda Authorizers"为了这。您可以按方法配置授权方。因此,只有为经过身份验证的用户保留的端点应该有一组。

它们是如何工作的?

每次请求到达配置了授权方的端点时,API 网关都会使用 request 信息触发它。然后,授权方检查 request 是否具有正确的凭据。如果是,则返回 IAM 策略。方法执行调用(例如另一个 Lambda 函数)将使用此策略。否则,授权方将返回错误状态代码,例如 403 Access Denied

在您的情况下,由于您使用的是 Cognito,因此可以使用 Cognito User Pool Authorizer .您可以使用 Cognito 的 SDK 或 AWS cli 创建它。配置完成后,您唯一需要做的就是在用户身份验证后附加 Cognito 提供的 idaccess token 。它通常在 Authorization header 中提供。

希望对你有帮助。

关于amazon-web-services - AWS API 网关 : API available for authenticated and guest users only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289406/

相关文章:

amazon-web-services - 如何在 Terraform 中迭代 'count' 资源?

go - Amazon Cognito 的 JWK 不包含 X5c 字段

javascript - 无法从 Amazon Cognito 用户池获取用户 session

django - 使用 IAM 进行用户身份验证

amazon-web-services - 如何配置对 Elastic beanstalk Cloudformation 模板的 ECR 读取访问权限?

amazon-web-services - 使用 Lambda 中的 AWS Cognito for .NET

amazon-web-services - 将输出变量与 terraform 一起使用时,“不是模块的有效输出”

javascript - Node.js - 在 Amazon EC2 上获取主机 IP 地址

amazon-cognito - 'https ://localhost:808 0' has been blocked by CORS policy: No ' Access-Control-Allow-Origin' header is present on the requested resource

amazon-web-services - 在 AWS Lambda 函数上运行 aws S3 cli 命令时 token 无效