【问题标题】:AWS API Gateway: API available for authenticated and guest users onlyAWS API Gateway:API 仅适用于经过身份验证的用户和来宾用户
【发布时间】:2019-12-08 21:26:18
【问题描述】:

我对 AWS 很陌生,我尝试了解一些基本概念。在我的 Android 应用中,我使用:

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

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

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

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

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

    它们是如何工作的?

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

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

    希望对你有帮助。

    【讨论】:

    • 感谢您的帮助。我终于选择了我刚刚发布的解决方案。
    • 是的,这就是我的建议
    • 啊,因为我不使用任何授权人,所以这就是我发布答案的原因。但无论如何,谢谢,它可能对另一种情况有用。
    【解决方案2】:

    我是这样做的,使用控制台:

    1. 在 API Gateway 中,点击资源,然后点击方法(GET、POST...)
    2. 点击方法请求
    3. 对于授权,选择AWS_IAM
    4. 在 Cognito 中,选择 管理身份池
    5. 创建(或编辑)用于 Cognito 用户池的身份池
    6. 未经身份验证的身份块中,选中启用对未经身份验证的身份的访问
    7. 在同一页面上(至少如果您编辑身份池),您还应该看到 Authenticated 角色Unauthenticated 角色
    8. 转到 IAM,并在 Roles 中找到这两个角色
    9. 对于每个角色,单击它,然后在 权限 选项卡中,单击附加到该角色的策略以查看它(左侧的小箭头)
    10. 点击 Edit policy,然后点击 JSON 选项卡,然后添加以下块(您可以通过转到 API Gateway 找到 ARN,点击您的 API,点击您的资源,点击您的方法:您将在 方法请求 块中找到 ARN):
    {
        "Effect": "Allow",
        "Action": [
            "execute-api:Invoke"
        ],
        "Resource": "<the_arn_of_your_resource_api>"
    }
    
    1. 点击查看政策,然后保存更改

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 2016-01-17
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2016-11-30
      • 2020-07-13
      • 1970-01-01
      相关资源
      最近更新 更多