我是 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 提供的 id
或 access
token 。它通常在 Authorization
header 中提供。
希望对你有帮助。
关于amazon-web-services - AWS API 网关 : API available for authenticated and guest users only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289406/