【问题标题】:Knowing customer context in AWS API Gateway with API Key使用 API 密钥了解 AWS API Gateway 中的客户上​​下文
【发布时间】:2019-07-07 22:25:39
【问题描述】:

我正在为我的 lambda 函数设置 API 网关并使用代理集成。我还为此 API 创建使用计划和 API 密钥,并与两个客户 c1 和 c2 共享 API 密钥 k1 和 k2。

当客户使用密钥 k2 拨打电话时,有没有办法从我的 lambda 函数中找到请求是由 c2 发出的?

我有一个实现 RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> 的 java 处理程序

但不幸的是,我在 APIGatewayProxyRequestEvent 中找不到客户上下文

【问题讨论】:

    标签: java amazon-web-services aws-lambda aws-api-gateway api-key


    【解决方案1】:

    API keys 的事件中,您将无法获得客户上下文。 API 密钥可以在多个usage plans 之间共享,用于不同的 API。因此它们不能绑定到任何一个 API 部署。如果您想这样做,您将自行管理(例如,将 1 个 API 限制为 1 个客户,将 API 密钥映射到客户)。

    我认为 AWS 不提供此功能的一个原因是 API keys 纯粹是为 usage plans 设计的。任何类型的身份验证/授权(用户识别很重要)都需要使用其他技术完成,例如IAMCognito user poolscustom authorizer。请参阅this

    要在使用计划中包含 API 方法,您必须将各个 API 方法配置为需要 API 密钥。对于用户身份验证和授权,请勿使用 API 密钥。使用 IAM 角色、Lambda 授权方或 Amazon Cognito 用户池。

    【讨论】:

      【解决方案2】:

      我会在 Method Request 和 Integration Request 处将 API 密钥添加到 HTTP 标头,以便 Lambda 接收提供的 API 密钥,然后 Lambda 中的函数根据读取的 API 密钥选择要运行的代码或打印用户编号.

      【讨论】:

      • 帖子说,api key 1 和 key 2 已经设置好了,为什么还要创建新的用户名和密码呢?
      • 是的,我认为这里不需要用户名/密码。我确实在 lambda 中获得了 API 密钥值 - 但后来我想不出使用 API 密钥值获取客户名称或 API 密钥名称的方法
      • 这只是从集成请求到 Lambda 的 API 网关流程的说明。有了 API 密钥,您当然不需要密码和用户名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2020-09-25
      • 1970-01-01
      • 2017-01-22
      • 2020-12-12
      • 2017-05-01
      • 2018-02-01
      相关资源
      最近更新 更多