为 API 网关的用户使用 API 密钥对

Use API key pairs for users for API gateway

我有一个 Web 应用程序 运行 它的 API 都在 AWS API 网关 后面。它目前使用 Cognito 令牌 进行身份验证。

现在我希望用户能够设置 API 密钥对(id 和 secret),这样他们将有另一种方法来以编程方式验证和访问他们的帐户,类似于此(https://support.binance.com/hc/en-us/articles/360002502072-How-to-create-API).

我知道一些解决方案(非最佳IMO,如果我错了请纠正我):

    可以使用来自 API 网关的
  1. API 密钥,但根据文档,它并不用于身份验证。
  2. 我们可以为其使用 IAM 凭据,但我不确定将 IAM 凭据分配给用户(而不是内部开发人员)是否是一种好的做法。

使用 API 网关实现类似 (https://support.binance.com/hc/en-us/articles/360002502072-How-to-create-API) 的最佳方法是什么?

我建议实施基于请求的 Lambda 授权方 [1]。 查看您的示例,您似乎还希望执行一些自定义的安全策略(即,基于 IP 地址的检查,启用特定的 APIs)。

  • 您的 Cognito 用户池仍将用于对您的 Web 应用程序进行基于 username/password 的身份验证。
  • 我的想法是将用户的 API 密钥和自定义安全策略存储在单独的数据存储(例如 DynamoDB)中。[​​=20=]
  • 然后用户可以在调用 API 时使用这些 API 键。
  • API 网关将触发 Lambda 授权方,Lambda 授权方负责验证传入请求中的 API 密钥,并根据您的自定义安全策略生成 IAM 策略。

[1] 请参阅 https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

中名为 "Create a Lambda Function of a Lambda Authorizer of the REQUEST type" 的部分